我有一个编辑控件,我试着子类,当我这样做整个窗口为空:窗口为空时,子类在C++编辑控制WINAPI
// Global variables
HINSTANCE hInst;
WNDPROC oldEditWndProc;
INT_PTR CALLBACK EditWndProc(HWND, UINT, WPARAM, LPARAM);
// Messages handler of the parent window
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hDC;
HWND myedit;
switch (message)
{
case WM_CREATE:
// Create the EDIT control
myedit= CreateWindowEx(
WS_EX_CLIENTEDGE|WS_EX_CONTROLPARENT,
L"EDIT",
L"",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_LEFT,
20, 120,
160, 20,
hWnd,
NULL,
hInst,
NULL
);
oldEditWndProc = (WNDPROC)GetWindowLongPtr (myedit, GWLP_WNDPROC);
// This is the line where problems begin
SetWindowLongPtr (myedit, GWLP_WNDPROC, (LONG_PTR)EditWndProc);
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// EDIT control own handler
INT_PTR CALLBACK EditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_GETDLGCODE:
return DLGC_WANTTAB;
break;
}
return (INT_PTR)FALSE;
}
我只是想不通为什么在拨打电话时整个窗口是空的SetWindowLongPtr
它随着时间的,因为我已经做过这方面的东西,所以我会离开的人更多专家全面回答。但基本上你已经替换了一个窗口过程,它做了一些事情,窗口过程几乎没有任何作用。如果你想专门处理'WM_GETDLGCODE'消息,那么你应该确保所有其他消息都像以前一样处理。 – john 2013-03-23 21:05:52