我有一个简单的对话框,其中包含一个列表框,编辑框和两个按钮,发送和清除,发送是默认设置.按下时,将从编辑框中读取字符串并将其添加到列表框中.清楚说明一切.当我第一次按下回车时一切正常,但是当我第二次按下回车时它没有响应/注册.如果单击该按钮,一切都按预期工作.
在将焦点更改回编辑框后,我尝试使用DM_SETDEFID,这没有做任何事情.
剥掉了不必要的代码,所以我希望没有什么遗漏.
INT_PTR CALLBACK CHAT(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_BUTTON1)
{
string strDisplay="You: "+strMessage;
TCHAR szDisplay[MESSAGE_SIZE];
strcpy_s(szDisplay, strDisplay.c_str());
SendDlgItemMessage(hDlg, IDC_LIST1, LB_ADDSTRING, NULL, (LPARAM)&szDisplay);
SetDlgItemText(hDlg, IDC_EDIT1, "");
}
SetFocus(GetDlgItem(hDlg, IDC_EDIT1));
}
else if(LOWORD(wParam) == IDC_BUTTON2)
{
SetDlgItemText(hDlg, IDC_EDIT1, "");
}
break;
case WM_CLOSE:
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
}
return (INT_PTR)FALSE;
}
Run Code Online (Sandbox Code Playgroud)
在资源文件中:
IDD_CHAT_DIALOG DIALOGEX 0, 0, 309, 176
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Chat"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "Message:",IDC_STATIC,198,12,102,8
EDITTEXT IDC_EDIT1,198,24,102,108,ES_MULTILINE
DEFPUSHBUTTON "Send",IDC_BUTTON1,198,138,104,14
PUSHBUTTON "Clear",IDC_BUTTON2,198,156,104,14
LISTBOX IDC_LIST1,7,7,185,167,LBS_NODATA | LBS_NOSEL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
END
Run Code Online (Sandbox Code Playgroud)
你有一个多行编辑控件.只要它有焦点,它就会处理所有ENTER按键.
这是设计的.如果在ENTER编辑控件具有焦点时按钮处理了按键,您如何在编辑控件中输入新行?
如果你确实需要停止多线编辑控制来吃ENTER钥匙,那么你可以处理WM_GETDLGCODE安排.该技术在此解释:http://blogs.msdn.com/b/oldnewthing/archive/2006/10/12/819674.aspx
顺便说一句,strcpy_s是虚假的.在字符串上调用c_str()并将其直接传递给API函数.
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |