要对子窗体进行子类化,请调用SetWindowLong函数,并指定窗口的句柄,以便将GWL_WNDPROC标志和指向子类过程的指针进行子类化。SetWindowLong返回一个指向原始窗口过程的指针;使用此指针将消息传递到原始过程。子类窗口过程必须使用CallWindowProc函数调用原始窗口过程。
以下示例显示如何在对话框中对编辑控件的实例进行子类化。子类窗口过程使编辑控件能够接收所有键盘输入,包括ENTER和TAB键,只要控件具有输入焦点。
WNDPROC wpOrigEditProc;
LRESULT APIENTRY EditBoxProc(la
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
HWND hwndEdit;
开关(uMsg)
{
case WM_INITDIALOG:
//检索编辑控件的句柄。
hwndEdit = GetDlgItem(hwndDlg, ID_EDIT);
//编辑控件子类。
wpOrigEditProc = (WNDPROC) SetWindowLong(hwndEdit,
GWL_WNDPROC, (LONG) EditSubclassProc);
//
//继续初始化过程。
//
return TRUE;
case WM_DESTROY:
//从编辑控件中删除子类。
SetWindowLong函数(hwndEdit,GWL_WNDPROC,cy
(LONG) wpOrigEditProc);
//
//继续清理过程。
//
break;
}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}
//子类程序
LRESULT APIENTRY EditSubclassProc(ja-Latn
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
if (uMsg == WM_GETDLGCODE)
return DLGC_WANTALLKEYS;
返回给CallWindowProc(wpOrigEditProc,HWND,味精,sw
wParam, lParam);
}