|
< ¸Þ¼¼Áö ¸®Ç÷º¼Ç
>
Åë»ó ÄÁÆ®·ÑÀº WM_COMMAND(ÄÚ¸Õ ÄÁÆ®·ÑÀÇ °æ¿ì´ÂWM_NOTIFY) ¸Þ¼¼Áö¸¦ ºÎ¸ð À©µµ¿ì¿¡ ¼Û½ÅÇÕ´Ï´Ù. ºÎ¸ð À©µµ¿ì´Â ±×·¯ÇÑ ¸Þ¼¼Áö¿¡ ÀÀ´äÇØ 󸮸¦ ½ÇÇàÇÕ´Ï´Ù.
¡¡±×·¯³ª ÄÁÆ®·ÑÀÌ º¸³»´Â ±×·¯ÇÑ ¸Þ¼¼Áö¸¦ ºÎ¸ð À©µµ¿ì´Â ¾Æ´Ï°í ±× ÄÁÆ®·Ñ Àڽſ¡°Ô ÀÀ´ä½ÃŰ°í ½ÍÀº °æ¿ì°¡ ÀÖ½À´Ï´Ù. ¸Þ¼¼Áö ¸®Ç÷º¼ÇÀº À̰ÍÀ» ½ÇÇöÇÏ´Â ±¸Á¶ÀÔ´Ï´Ù. ¸Þ¼¼Áö ¸®Ç÷º¼ÇÀ» »ç¿ëÇϸé ÄÁÆ®·ÑÀÌ ºÎ¸ð À©µµ¿ì¿¡ º¸³½ ¸Þ¼¼Áö´Â ºÎ¸ð À©µµ¿ì·ÎºÎÅÍ ÄÁÆ®·Ñ¿¡ ¹Ý¼ÛµÇ¾î ÄÁÆ®·ÑÀÌ ÀÀ´äÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ¸Þ¼¼Áö¸¦ ¹Ý¼ÛÇÏ´Â ºÎ¸ð À©µµ¿ì Ŭ·¡½ºÀÇ ¸Þ¼¼Áö ¸ÊÀÔ´Ï´Ù.
|
// ºÎ¸ð À©µµ¿ì
class CMainDlg : public CDialogImpl<CMainDlg>
{
...
...
// ¸Þ¼¼Áö ¸Ê
BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
...
...
REFLECT_NOTIFICATIONS() // 󸮵ÇÁö ¾Ê¾Ò´ø ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ¸Þ¼¼Áö¸¦ ¹Ý¼Û
END_MSG_MAP()
...
...
|
¡¡ºÎ¸ð À©µµ¿ì(ÀÌ ¿¹¿¡¼´ÂCMainDlg)´Â ÄÁÆ®·Ñ·ÎºÎÅÍÀÇ ¸Þ¼¼Áö¸¦ ¹Þ¾ÆµéÀÌ¸é ¸Þ¼¼Áö ¸Ê¿¡ ±× ¸Þ½ÃÁö ¿ëÀÇ ¸Þ¼¼Áö ¸Ê ¿£Æ®¸®°¡ ÀÖ´ÂÁö ¾î¶²Áö Á¶»çÇÕ´Ï´Ù. ÇØ´çÇÏ´Â ¸Þ¼¼Áö ¸Ê ¿£Æ®¸®°¡ ¾øÀ¸¸é , REFLECT_NOTIFICATIONS ¸ÅÅ©·Î¿¡ ÀÇÇØ ¸Þ¼¼Áö¸¦ º¸³» ¿Â ÄÁÆ®·Ñ¿¡ ¹Ý¼ÛÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ ¹Ý¼ÛµÈ ¸Þ¼¼Áö¿¡ ÀÀ´äÇÏ´Â ÄÁÆ®·Ñ Ŭ·¡½º¸¦ Á¤ÀÇÇÕ´Ï´Ù. ¿©±â¿¡¼´Â ¹öư¿ë Ŭ·¡½ºCUrlButton¸¦ Á¤ÀÇÇÕ´Ï´Ù. CUrlButtonŬ·¡½º´Â ¹öưÀÇ Ä¸¼Ç ij¸¯ÅÍ ¶óÀÎÀ» URLÀ̶ó°í °¡Á¤ÇØ ¹öưÀ» ´©¸£¸é ±× URL¸¦ ¿±´Ï´Ù. ÀÌ ¿¹¿¡¼´Â
UrlButton.hÀ̶ó°í ÇÏ´Â Çì´õ ÆÄÀÏÀ» ÁغñÇØ °Å±â¿¡ CUrlButtonŬ·¡½º¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
|
// UrlButton.h
class CUrlButton : public CWindowImpl<CUrlButton>
{
public:
DECLARE_WND_SUPERCLASS(_T("UrlButton"),
_T("BUTTON"))
// ¸Þ¼¼Áö ¸Ê
BEGIN_MSG_MAP_EX(CUrlButton)
MSG_OCM_COMMAND(OnCommand)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
void OnCommand(UINT
uNotifyCode, int nID, HWND hWndCtl){
TCHAR szURL[2048];
GetWindowText(szURL, sizeof(szURL)/sizeof(TCHAR));
ShellExecute(m_hWnd,
_T("open"), szURL, NULL, NULL,
SW_SHOWNORMAL);
}
}
|
À̰Ϳ¡ ÀÇÇØ ºÎ¸ð À©µµ¿ì·ÎºÎÅÍ ¹Ý¼ÛµÈ ¸Þ¼¼Áö´Â ¸Þ¼¼Áö¸¦ º¸³½ ÄÁÆ®·ÑÀÇ ¸Þ¼¼Áö ¸ÊÀ¸·Î 󸮵˴ϴÙ. ¹Ý¼ÛµÈ ¸Þ½ÃÁö´Â OCM_À¸·Î ½ÃÀ۵˴ϴÙ. (OCM_COMMAND³ªOCM_NOTIFY³ªOCM_CTLCOLORBTNµî. ) WTL´Â ¹Ý¼ÛµÈ ¸Þ¼¼Áö¸¦ À§ÇÑ ¸Þ¼¼Áö ¸ÅÅ©·Î¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. À§ÀÇ ¿¹¿¡¼´ÂOCM_COMMAND ¸Þ½ÃÁö¸¦ MSG_OCM_COMMAND ¸Þ¼¼Áö ¸ÅÅ©·Î¿¡ ÀÇÇØ OnCommand()¿¡ ¸ÅÇÎ Çϰí ÀÖ½À´Ï´Ù. µ¡ºÙ¿© 󸮵ÇÁö ¾Ê¾Ò´ø ¸Þ½ÃÁö´Â DEFAULT_REFLECTION_HANDLER
¸ÅÅ©·Î¿¡ ÀÇÇØ 󸮵˴ϴÙ.
¸¶Áö¸·À¸·Î ÄÁÆ®·ÑÀ» ÀÛ¼ºÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÛ¼ºÇϱâ À§Çؼ´ÂCreate()À» È£ÃâÇÕ´Ï´Ù¸¸ SubclassWindow()¿¡ ÀÇÇØ ±âÁ¸ÀÇ ÄÁÆ®·ÑÀ» ¼ºê Ŭ·¡½ºÈÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
|
class CMainDlg : public CDialogImpl<CMainDlg>
{
...
...
enum { IDC_BUTTON_URL = 1001 };
CUrlButton
m_button_url;
LRESULT OnInitDialog(HWND hWnd,
LPARAM lParam){
// ÄÁÆ®·Ñ ÀÛ¼º
m_button_url.Create(m_hWnd, CRect(0, 0, 200, 30),
_T("http://www.google.com/"), WS_CHILD | WS_VISIBLE, 0,
IDC_BUTTON_URL);
// ¶Ç´Â ±âÁ¸ÀÇ ÄÁÆ®·ÑÀ» ¼ºê Ŭ·¡½ºÈ
// m_button_url.SubclassWindow(GetDlgItem(IDC_BUTTON_URL));
return TRUE;
}
...
...
|
ÀÌ¿Í °°ÀÌ ¸Þ¼¼Áö ¸®Ç÷º¼ÇÀ» »ç¿ëÇϸé ÄÁÆ®·Ñ Ŭ·¡½º°¡ ºÎ¸ð À©µµ¿ì¿¡ ÀÇÁ¸ÇÏÁö ¾Ê°í ÀÚ½ÅÀÌ ºÎ¸ð À©µµ¿ì¿¡ º¸³½ ¸Þ¼¼Áö¿¡ ´ëÇÑ µ¿ÀÛÀ» ÀÚ±â ÀÚ½ÅÀ¸·Î ±¸Çö ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº CUrlButtonŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù.

|
// 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 };
CUrlButton
m_button_url;
// ¸Þ¼¼Áö ¸Ê
BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_ID_HANDLER_EX(IDOK, OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
REFLECT_NOTIFICATIONS() // ¸Þ¼¼Áö¸¦ ¹Ý¼Û
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_url.SubclassWindow(GetDlgItem(IDC_BUTTON_URL));
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 "UrlButton.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¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© ¹öưÀÇ Ä¸¼ÇÀº À¯È¿ÇÑURLij¸¯ÅÍ ¶óÀÎÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù.
|
ÄÁÆ®·Ñ¸í
|
¸®¼Ò½º ID
|
|
Ǫ½¬ ¹öư
|
IDC_BUTTON_URL
|
¡¡´ÙÀ½¿¡ CMainDlg Ŭ·¡½º¿¡¼
URL¹öư¿ëÀ¸·Î CUrlButton Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ ¸Þ¼¼Áö ¸ÊÀ¸·Î REFLECT_NOTIFICATIONS¸¦ Ãß°¡ÇØ ¸¶Áö¸·¿¡ WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î SubclassWindow()¿¡ ÀÇÇØ ±âÁ¸ÀÇ ¹öư ÄÁÆ®·ÑÀ» ¼ºê Ŭ·¡½ºÈÇÕ´Ï´Ù.
¡¡±×·±µ¥ À̹øÀº ¹Ý¼ÛµÈ ¸Þ¼¼ÁöÀÇ ¸ÅÇο¡ MSG_OCM_COMMAND ¸Þ¼¼Áö ¸ÅÅ©·Î¸¦ »ç¿ëÇß½À´Ï´Ù¸¸ WTLÀº ¹Ý¼ÛµÈ ¸Þ½ÃÁö¿ë À¸·Î ´ÙÀ½°ú °°Àº Á¾·ùÀÇ ¸Þ¼¼Áö ¸ÅÅ©·Î¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù.
|