我有一个编辑控件:
HWND hInput = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL |
ES_WANTRETURN,
0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_INPUT, GetModuleHandle(NULL), NULL);
当按下按钮时,我从中获取文本并尝试用空字符串替换它:
TCHAR buff[2048];
memset(buff,0,2048);
GetWindowText(hInput, buff, 2048);
SetWindowText(hInput,"");
但是在编辑控件中之后会有一个新行。
有关如何删除此新行的任何想法?提前谢谢。
修改 实际上然后按下按钮就可以了,没有换行。
编辑控件有一个消息程序,用于捕获回车键,并在按下按钮时执行与按钮相同的操作。这是程序:
LRESULT CALLBACK SubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_KEYDOWN:
switch (wParam)
{
case VK_RETURN:
TCHAR buff[2048];
memset(buff,0,2048);
GetWindowText(hInput, buff, 2048);
SetWindowText(hInput,"");
break;
}
break;
}
return CallWindowProc(DefProc, hwnd, msg, wParam, lParam);
}
但是这里它留下了新的一行。
答案 0 :(得分:2)
处理WM_KEYDOWN时,您已成功清除编辑控件。
然后将该消息传递给基类,即编辑控件,并在文本中插入回车符。这是一个理论。如果它是正确的,那么只是不将WM_KEYDOWN消息发送到基类将解决问题。
另一个理论是WM_KEYDOWN之后是WM_CHAR(由TranslateMessage合成),并且编辑控件根据该消息添加回车符。如果它是正确的,那么你有一个有趣的情况,你说你想要一个多行编辑控件,但是你每次用户试图创建一个新行时都试图清除内容。
我想念ES_WANTRETURN。这与对话框代码一起使用,以确保它不会完全窃取回车按键。这就是我改变原来答案的原因。