C++ 编辑控件捕获输入键
我有一个编辑控件C++ 编辑控件捕获输入键,c++,winapi,C++,Winapi,我有一个编辑控件 HWND hInput = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_INPUT, GetModuleHandle(NULL), NULL); 和一个按钮: HWND hSendButton = Cr
HWND hInput = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_INPUT, GetModuleHandle(NULL), NULL);
和一个按钮:
HWND hSendButton = CreateWindowEx(WS_EX_CLIENTEDGE,"BUTTON","Send!",
BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,
0,0,0,0,hwnd,(HMENU)IDC_MAIN_SENDBUTTON,GetModuleHandle(NULL),NULL);
在编辑控件中键入时,是否有方法查看按下Enter键的时间
然后像按下按钮一样发送信息
我想可能吧
SendMessage(hwnd,WM_COMMAND,(WPARAM)IDC_MAIN_SENDBUTTON,LPARAM(0));
我将完成发送消息的工作,但我仍然无法捕获回车键
先谢谢你 您需要对编辑控件进行子类化,并处理WM_KEYDOWN消息。如果它是您想要的密钥,则发送消息,否则,让默认的编辑控制过程执行其工作 代码如下所示:
WNDPROC oldEditProc;
LRESULT CALLBACK subEditProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_KEYDOWN:
switch (wParam)
{
case VK_RETURN:
//Do your stuff
break; //or return 0; if you don't want to pass it further to def proc
//If not your key, skip to default:
}
default:
return CallWindowProc(oldEditProc, wnd, msg, wParam, lParam);
}
return 0;
}
void somecreateeditproc()
{
HWND hInput = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_INPUT, GetModuleHandle(NULL), NULL);
oldEditProc = (WNDPROC)SetWindowLongPtr(hInput, GWLP_WNDPROC, (LONG_PTR)subEditProc);
}
我在对话框中执行此操作:
BOOL CDialogObject::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
SendMessage(WM_COMMAND, (WPARAM)IDC_BUTTON3,LPARAM(0));
}
return CDialog::PreTranslateMessage(pMsg);
}
执行此操作的传统方法是声明一个加速器表,该表将ENTER定义为映射到IDC\u MAIN\u SENDBUTTON。还请注意,
GetModuleHandle(NULL)
不是最佳做法,因为它将窗口放在主可执行文件的命名空间中,而不是创建窗口的模块中。