< ¼­ºê Ŭ·¡½º >


¼­ºê
Ŭ·¡½ºÈ­¸¦ ÇÏ¸é ±âÁ¸ÀÇ À©µµ¿ì(¿¹¸¦ µé¸é ´ÙÀ̾ó·Î±×»óÀÇ ÄÁÆ®·Ñ) ÀÇ µ¿ÀÛÀ» È®ÀåÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

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

// BeepButton.h

class CBeepButton : public CWindowImpl<CBeepButton>

{

public:

    BEGIN_MSG_MAP_EX(CBeepButton)

        MSG_WM_LBUTTONDOWN(OnLButtonDown)

    END_MSG_MAP()

 

    void OnLButtonDown(UINT uFlags, CPoint pt){

        MessageBeep(MB_ICONASTERISK);

        SetMsgHandled(FALSE);

    }

};

                      


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

µ¡ºÙ¿© ÀÌ CBeepButtonŬ·¡½º ÀÚü´Â Åë»óÀÇ À©µµ¿ìÀÌ¸ç  ¹öư ÄÁÆ®·Ñ·Î ÇÑÁ¤µÈ °ÍÀÌ ¾Æ´Õ´Ï´Ù. ½ÇÁ¦·Î  ¹öư ÄÁÆ®·Ñ¿¡ ±Ù°ÅÇÑ beep ¹öưÀ» ÀÛ¼ºÇϱâ À§Çؼ­´Â  CBeepButton::SubclassWindow()¿¡ ¹öư ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ÁöÁ¤ÇØ È£ÃâÇÕ´Ï´Ù.

CBeepButton m_button_beep;

...

 

LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){

    ...

    ...

 

    m_button_beep.SubclassWindow(±âÁ¸ÀÇ ¹öư ÄÁÆ®·ÑÀÇ ÇÚµé);

}

                      


ÀÌ¿Í °°ÀÌ ½´ÆÛ Ŭ·¡½º È­¿¡¼­´ÂDECLARE_WND_SUPERCLASS ¸ÅÅ©·Î¸¦ »ç¿ëÇØ ¡¸Å¬·¡½º¡¹¿¡ ´ëÇØ¼­ ±âº»À¸·Î µÇ´Â ÄÁÆ®·ÑÀ» ÁöÁ¤ÇÕ´Ï´Ù¸¸ ¼­ºê Ŭ·¡½ºÈ­¿¡¼­´Â SubclassWindow()À» »ç¿ëÇØ ¡¸ÀνºÅϽº¡¹¿¡ ´ëÇØ¼­ ±âº»À¸·Î µÇ´Â ÄÁÆ®·ÑÀ» ÁöÁ¤ÇÕ´Ï´Ù.

¡¡
´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº ÀÌ 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 };

 

    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.SubclassWindow(GetDlgItem(IDC_BUTTON_BEEP));

 

        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;

}

                      


¡¡
¿ì¼± , ¸®¼Ò½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ ¹öư ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ  ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù.

ÄÁÆ®·Ñ¸í

¸®¼Ò½º ID

Ǫ½¬ ¹öư

IDC_BUTTON_BEEP


¡¡
´ÙÀ½¿¡ CMainDlg Ŭ·¡½º¿¡¼­ beep ¹öư¿ëÀ¸·Î CBeepButton Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀº WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·ÎSubclassWindow()¿¡  ÀÇÇØ ¼­ºê Ŭ·¡½ºÈ­ ÇÕ´Ï´Ù.

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