我将类似
的编辑框控件子类化lpfnOldWndProc = (FARPROC)SetWindowLong(hEdit,GWL_WNDPROC, (DWORD)SubClassFunc);
LRESULT FAR PASCAL SubClassFunc( HWND hWnd,
UINT Message,
WPARAM wParam,
LPARAM lParam)
{
switch(Message)
{
case WM_CHAR:
//Process this message to avoid message beeps.
if ((wParam == VK_RETURN) || (wParam == VK_TAB))
{
//Do Something
return 0;
}
break;
case WM_KEYDOWN:
if ((wParam == VK_RETURN) || (wParam == VK_TAB)) {
//Do Something
return 0;
}
break ;
default:
break;
}
return CallWindowProc((WNDPROC)lpfnOldWndProc, hWnd, Message, wParam, lParam);
}
现在,当我在editbox中输入char时,将调用此子类程序。但是当按下回车键时我无法得到它。
上述程序是否有问题。
答案 0 :(得分:6)
不,系统使用WM_GETDLGCODE来确定控件感兴趣的按键。默认情况下,编辑框不处理Return(对话框程序将其解释为按下默认按钮),因此不需要VK_RETURNS发送给它。你需要处理WM_GETDLGCODE消息并返回DLGC_WANTALLKEYS然后你应该得到你的VK_RETURNS。
MS文档非常清楚地概述了这种子分类方案。