WTL¿¡¼­ Ç¥ÁØ ÄÁÆ®·ÑÀÇ ¹öư ÄÁÆ®·Ñ(Ǫ½¬ ¹öư , üũ ¹Ú½º , ¶óµð¿À ¹öư)À» CButtonT À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼­ ĸ½¶È­Çϰí ÀÖ½À´Ï´Ù. ÅÛÇø´ Àμö¿¡´Â Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù¸¸ ±× Ŭ·¡½º´ÂCButtonT Ŭ·¡½ºÀÇ base class·Î¼­ »ç¿ëµË´Ï´Ù.  atlctrls.h Çì´õ¿¡¼­´Â typedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.

// atlctrls.h

typedef CButtonT<ATL::CWindow>   CButton;

                      


À̰ÍÀº CButtonŬ·¡½º´Â CWindow Ŭ·¡½ºÀÇ »ó¼Ó Ŭ·¡½ºÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

¡¡WTLÀÇCButtonŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CButtonŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù.

 

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

#include <atlctrls.h>  // ÄÁÆ®·Ñ¿ë Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ(¶§¹®¿¡)

                      

 

// maindlg.h

class CMainDlg : public CDialogImpl<CMainDlg>

{

public:

    enum { IDD = IDD_MAINDLG };

 

    CButton m_radio_addicon;     // [¾ÆÀÌÄÜ ÀÖ¾î]¶óµð¿À ¹öư

    CButton m_radio_removeicon;  // [¾ÆÀÌÄÜ ¾øÀ½]¶óµð¿À ¹öư

    CButton m_check_topmost;     // [Ç×»ó ¾Õ¿¡ Ç¥½Ã]üũ ¹Ú½º

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_ID_HANDLER_EX(IDC_BUTTON_SHOW, OnButtonShow)

        COMMAND_ID_HANDLER_EX(IDC_CHECK_TOPMOST, OnCheckTopmost)

        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_radio_addicon = GetDlgItem(IDC_RADIO_ADDICON);

        m_radio_removeicon = GetDlgItem(IDC_RADIO_REMOVEICON);

        m_check_topmost = GetDlgItem(IDC_CHECK_TOPMOST);

 

        m_radio_addicon.SetCheck(1);

 

        return TRUE;

    }

 

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

        UINT uIcon = MB_OK;

        if(m_radio_addicon.GetCheck())

            uIcon |= MB_ICONINFORMATION;

        MessageBox(_T("Hello, ATL/WTL"), _T("¸Þ¼¼Áö"), uIcon);

    }

 

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

        SetWindowPos(m_check_topmost.GetCheck() ? HWND_TOPMOST : HWND_NOTOPMOST,

            0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);

    }

 

    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 "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_SHOW

¶óµð¿À ¹öư([¾ÆÀÌÄÜ ÀÖ¾î]¿ë)

IDC_RADIO_ADDICON

¶óµð¿À ¹öư([¾ÆÀÌÄÜ ¾øÀ½]¿ë)

IDC_RADIO_REMOVEICON

üũ ¹Ú½º

IDC_CHECK_TOPMOST


¡¡´ÙÀ½¿¡ stdafx.h¾È¿¡¼­´Â CButton Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ­ atlctrls.h Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù.  atlctrls.h Çì´õ¿¡´Â Ç¥ÁØ ÄÁÆ®·Ñ°ú °ø¿ë ÄÁÆ®·Ñ¿ëÀÇ Å¬·¡½º°¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù.

¡¡CMainDlgŬ·¡½º¿¡¼­´Â  ¿ì¼±  µÎ °³ÀÇ ¶óµð¿À ¹öư°ú ÇϳªÀÇ Ã¼Å© ¹Ú½º¿ëÀ¸·Î CButton Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇÕ´Ï´Ù. À̰͵éÀ» »ç¿ëÇϱâ À§Çؼ­´Â WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ´ëÀÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

¡¡´ÙÀ½¿¡  ÀÚ¿ø ID°¡ IDC_BUTTON_SHOW¿Í IDC_CHECK_TOPMOSTÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯·Î¼­ °¢°¢ OnButtonShow() , OnCheckTopmost()¸¦ Ãß°¡ÇÕ´Ï´Ù.

OnButtonShow()´Â Ǫ½¬ ¹öưÀ» Ŭ¸¯ÇßÀ» ¶§¿¡ ºÒ·Á °©´Ï´Ù. ÀÌ Çڵ鷯 ÇÔ¼ö¿¡¼­´Â ¶óµð¿À ¹öư »óŸ¦ CButtonT::GetCheck()¿¡ ÀÇÇØ ÃëµæÇØ  [¾ÆÀÌÄÜ ÀÖ¾î]°¡ ¼±Åõǰí ÀÖ¾úÀ» °æ¿ì´Â MB_ICONINFORMATIONÀ» ÁöÁ¤ÇØ ¸Þ½ÃÁö ¹Ú½º¸¦ Ç¥½ÃÇÕ´Ï´Ù.

OnCheckTopmost()´Â üũ ¹Ú½º¸¦ Ŭ¸¯ÇßÀ» ¶§¿¡ ºÒ·Á °©´Ï´Ù. ÀÌ Çڵ鷯 ÇÔ¼ö¿¡¼­´Â üũ ¹Ú½º »óŸ¦ CButtonT::GetCheck()¿¡ ÀÇÇØ ÃëµæÇØ  SetWindowPos()¿¡ ÀÇÇØ À©µµ¿ìÀÇZ¿À´õ¸¦ º¯°æÇÕ´Ï´Ù.

¡¡µ¡ºÙ¿© CButtonT Ŭ·¡½º´Â Click()À̶ó°í ÇÏ´Â ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. À̰ÍÀº Ŭ¸¯À» ½Ã¹Ä·¹ÀÌÆ® ÇÕ´Ï´Ù.