< ½´ÆÛ Ŭ·¡½º >

½´ÆÛ
Ŭ·¡½ºÈ­¸¦ Çϸé ÄÁÆ®·Ñ µîÀÇ Á¤Àǰ¡ ³¡³­ À©µµ¿ì Ŭ·¡½º("BUTTON"³ª"SysListView32"µî )¸¦ È®ÀåÇÏ´Â »õ·Î¿î À©µµ¿ì Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.

¡¡
ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº ¹öư ÄÁÆ®·ÑÀ» ½´ÆÛ Ŭ·¡½ºÈ­ ÇØ Ŭ¸¯µÇ¾úÀ» ¶§¿¡ beepÀ½À» ¿ï¸®´Â ¹öư(beep ¹öư) À» Á¤ÀÇÇÏ´Â ¿¹ÀÔ´Ï´Ù. ÀÌ ¿¹¿¡¼­´ÂBeepButton.hÀ̶ó°í ÇÏ´Â Çì´õ ÆÄÀÏÀ» ÁغñÇØ °Å±â¿¡ CBeepButton¶ó°í Çϴ Ŭ·¡½º¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.

// BeepButton.h

class CBeepButton : public CWindowImpl<CBeepButton>

{

public:

    DECLARE_WND_SUPERCLASS(_T("BeepButton"), _T("BUTTON"))

 

    BEGIN_MSG_MAP_EX(CBeepButton)

        MSG_WM_LBUTTONDOWN(OnLButtonDown)

    END_MSG_MAP()

 

    void OnLButtonDown(UINT uFlags, CPoint pt){

        MessageBeep(MB_ICONASTERISK);

        SetMsgHandled(FALSE);

    }

};

                      


½´ÆÛ Ŭ·¡½ºÈ­Çϱâ À§Çؼ­´Â DECLARE_WND_SUPERCLASS() ¸ÅÅ©·Î¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸ÅÅ©·ÎÀÇ Á¦1Àμö¿¡´Â ½´ÆÛ Ŭ·¡½ºÈ­ÇÏ´Â À©µµ¿ì Ŭ·¡½º ¸íÀ» ÁöÁ¤ÇØ Á¦2Àμö¿¡´Â ±× ¿øÀÌ µÇ´Â ±âÁ¸ÀÇ À©µµ¿ì Ŭ·¡½º ¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¿¹ ¿¡¼­´Â beep ¹öưÀÌ "BUTTON" À©µµ¿ì Ŭ·¡½º¿¡ ±Ù°ÅÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

CBeepButtonŬ·¡½º¿¡¼­´Â WM_LBUTTONDOWN ¸Þ¼¼Áö Çڵ鷯·Î beepÀ½À» ¿ï¸®µµ·Ï Çϰí ÀÖ½À´Ï´Ù. ±×¸®°í SetMsgHandled(FALSE)¸¦ È£ÃâÇÏ´Â °Í¿¡ ÀÇÇØ  beepÀ½À» ¿ï¸®´Â Àܴ̿ º¸Åë ¹öư°ú °°ÀÌ µ¿ÀÛÇϵµ·Ï Çϰí ÀÖ½À´Ï´Ù.

¡¡
´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº ÀÌ CBeepButtonŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù.

 

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

                      

 

// maindlg.h

class CMainDlg : public CDialogImpl<CMainDlg>

{

public:

    enum { IDD = IDD_MAINDLG };

 

    enum { IDC_BUTTON_BEEP = 1001 };

    CBeepButton m_button_beep;

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_ID_HANDLER_EX(IDOK, OnOK)

        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)

    END_MSG_MAP()

 

    LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){

        // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡

        CenterWindow();

 

        // Å« ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));

        SetIcon(hIcon, TRUE);

       

        // ÀÛÀº ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));

        SetIcon(hIconSmall, FALSE);

 

        // ÄÁÆ®·Ñ ÀÛ¼º

        m_button_beep.Create(m_hWnd, CRect(0, 0, 200, 30),

            _T("beep ¹öư"), WS_CHILD | WS_VISIBLE, 0, IDC_BUTTON_BEEP);

        m_button_beep.SetFont(GetFont());

        m_button_beep.CenterWindow();

 

        return TRUE;

    }

 

    void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

 

    void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

};

                      

 

// Control.cpp

#include "stdafx.h"

 

#include "resource.h"

 

#include "BeepButton.h"

#include "maindlg.h"

 

CAppModule _Module;

 

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)

{

    HRESULT hRes = ::CoInitialize(NULL);

    ATLASSERT(SUCCEEDED(hRes));

 

    ::DefWindowProc(NULL, 0, 0, 0L);

 

    AtlInitCommonControls(ICC_COOL_CLASSES | ICC_WIN95_CLASSES);

 

    hRes = _Module.Init(NULL, hInstance);

    ATLASSERT(SUCCEEDED(hRes));

 

    int nRet = 0;

    // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà

    {

        CMainDlg dlgMain;

        nRet = dlgMain.DoModal();

    }

 

    _Module.Term();

    ::CoUninitialize();

 

    return nRet;

}

                      


¡¡
¿ì¼± CMainDlg Ŭ·¡½º¿¡¼­ beep ¹öư¿ëÀ¸·Î CBeepButton Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇÕ´Ï´Ù. ±×¸®°í ±× ¹öư¿ëÀÇ ID À¸·Î¼­ IDC_BUTTON_BEEP¸¦ ¼±¾ðÇÕ´Ï´Ù.

¡¡
´ÙÀ½À¸·Î WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î beep ¹öưÀ» ÀÛ¼ºÇÕ´Ï´Ù.

¡¡
¸¶Áö¸·À¸·Î Control.cppÆÄÀϳ»¿¡¼­ maindlg.h Çì´õÀÇ ¾Õ¿¡ BeepButton.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.

¡¡
µ¡ºÙ¿© WTLÀº DECLARE_FRAME_WND_SUPERCLASS À̶ó°í ÇÏ´Â ¸ÅÅ©·Îµµ ÁغñÇØ ÀÖ½À´Ï´Ù. À̰ÍÀº ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ½´ÆÛ Ŭ·¡½ºÈ­ÇÕ´Ï´Ù.