我将编辑框控件归类为
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时,将调用此子类化过程。但是当按下回车键时我无法获取它。
在上述过程中这有什么问题吗?
最佳答案
否,系统使用WM_GETDLGCODE来确定控件需要按哪个键。默认情况下,编辑框不处理Return(对话框过程将其解释为按下默认按钮),因此不需要将VK_RETURNS发送到它。您需要处理WM_GETDLGCODE消息并返回DLGC_WANTALLKEYS,然后您将获得VK_RETURNS。
MS文档很好地概述了此子分类方案。
关于c++ - 无法为子类化的编辑框控件捕获VK_RETURN键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1284364/