将窗口子类别

【勇芳软件工作室】汉化HomePreviousNext

要对子窗体进行子类化,请调用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);

}