第一种通过Attack
HWND hWnd = GetDlgItem(IDC_LIST1);
m_list.Attach(hWnd);
hWnd = GetDlgItem(IDC_EDIT1);
m_edit.Attach(hWnd);
m_edit.SetWindowText(_T("hell wolrd "));
第二种通过窗口子类化
m_btnOk.SubclassWindow(GetDlgItem(IDOK));
m_btnCacel.SubclassWindow(GetDlgItem(IDCANCEL));
第三种通过之类继承
template<LPCTSTR res>
class CTCButton :public CWindowImpl<CTCButton<res>,CButton>
{
public:
BEGIN_MSG_MAP_EX(CTCButton)
MSG_WM_SETCURSOR(OnSetCursorOK)
END_MSG_MAP()
LRESULT OnSetCursorOK(HWND hWnd, UINT uHitTest, UINT uMsg)
{
static HCURSOR hcur = LoadCursor(NULL, res);
if (hcur != NULL)
{
SetCursor(hcur);
return TRUE;
}
else
{
SetMsgHandled(False);
return false;
}
return 0;
}
};
第四种通过DDX
class CTCEdit:public CWindowImpl<CTCEdit,CEdit>
{
public:
BEGIN_MSG_MAP_EX(CTCEdit)
MSG_WM_CONTEXTMENU(OnContextMenu)
END_MSG_MAP()
void OnContextMenu(HWND, CPoint pt)
{
MessageBox(_T("Menu done!"));
}
};
主代码
class CMainDlg : public CDialogImpl<CMainDlg>,
public CWinDataExchange<CMainDlg>
{
public:
CMainDlg() :m_btnOk(this,1), m_btnCacel(this,2)
{
;
}
BEGIN_DDX_MAP(CMainDlg)
DDX_CONTROL(IDC_EDIT2, m_edit2)
END_DDX_MAP()
enum { IDD = IDD_MAINDLG };
BEGIN_MSG_MAP_EX(CMainDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
COMMAND_ID_HANDLER(IDOK, OnOK)
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
ALT_MSG_MAP(1)
MSG_WM_SETCURSOR(OnSetCursorOK)
ALT_MSG_MAP(2)
MSG_WM_SETCURSOR(OnSetCursorCancel)
END_MSG_MAP()
LRESULT OnInitDialog(UINT , WPARAM , LPARAM , BOOL& )
{
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);
HWND hWnd = GetDlgItem(IDC_LIST1);
m_list.Attach(hWnd);
hWnd = GetDlgItem(IDC_EDIT1);
m_edit.Attach(hWnd);
m_edit.SetWindowText(_T("hell wolrd "));
m_btnOk.SubclassWindow(GetDlgItem(IDOK));
m_btnCacel.SubclassWindow(GetDlgItem(IDCANCEL));
m_btnAbout.SubclassWindow(GetDlgItem(ID_APP_ABOUT));
DoDataExchange(FALSE);
return TRUE;
}
LRESULT OnAppAbout(WORD , WORD , HWND , BOOL& )
{
CSimpleDialog<IDD_ABOUTBOX, FALSE> dlg;
dlg.DoModal();
return 0;
}
LRESULT OnOK(WORD , WORD wID, HWND , BOOL& )
{
EndDialog(wID);
return 0;
}
LRESULT OnCancel(WORD , WORD wID, HWND , BOOL& )
{
EndDialog(wID);
return 0;
}
LRESULT OnSetCursorOK(HWND hWnd,UINT uHitTest,UINT uMsg)
{
static HCURSOR hcur = LoadCursor(NULL, IDC_HAND);
if (hcur != NULL)
{
SetCursor(hcur);
return TRUE;
}
else
{
SetMsgHandled(False);
return false;
}
return 0;
}
LRESULT OnSetCursorCancel(HWND hWnd, UINT uHitTest, UINT uMsg)
{
static HCURSOR hcur = LoadCursor(NULL, IDC_NO);
if (hcur != NULL)
{
SetCursor(hcur);
return TRUE;
}
else
{
SetMsgHandled(False);
return false;
}
return 0;
}protected:
CListViewCtrl m_list;
CEdit m_edit;
CContainedWindow m_btnOk;
CContainedWindow m_btnCacel;
CTCButton<IDC_HELP> m_btnAbout;
CTCEdit m_edit2;
};