编辑控件无法将文本设置为空字符串
Edit control can't set text to empty string
我有一个编辑控件:
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);
}
但是这里它留下了新行
当您处理WM_KEYDOWN时,您成功地清除了编辑控件。
然后将该消息传递给基类,它是编辑控件,它将回车插入文本中。这是一种理论。如果它是正确的,那么简单地不发送WM_KEYDOWN消息到基类将解决问题。
另一种理论是WM_KEYDOWN后面跟着一个WM_CHAR(由TranslateMessage合成),编辑控件根据该消息添加回车。如果它是正确的,那么你有一个有趣的情况,你说你想要一个多行编辑控件,但你试图清除内容,每次用户试图创建一个新的行。
关于ES_WANTRETURN我说错了。这与对话框代码一起工作,以确保它不会完全窃取回车键。所以我改了原来的答案
相关文章:
- C++ 命名参数习惯用语 - 未设置字符串属性
- 如何将字符串属性设置为 QTreeWidgetItem?
- 我如何处理有关输入的字符串大小超过字符数组设置大小的错误?
- C++如何将字符串数组中的一个点设置为枚举变量
- 从C++为字符串函数设置_ENV
- 在给定字符串上使用 tolower() 和 isalpha() 并将其输出设置为另一个字符串
- 通过比较字符设置字符串时出现问题
- 如何在 c++ 中从字符串向量设置类对象
- STD ::设置带有字符串键和潜在效率损失
- 如何调用 GetAltMonthNames 来填充外部区域设置月份字符串的安全数组
- 设置可变值通过字符串引用它
- 仅使用 getName 在主函数中设置字符串名称
- 用设置功能在类中设置字符串
- 如何从十六进制设置字符串值
- 为什么这段代码跳过设置字符串变量的 if 语句
- 使用C/C++设置字符串格式
- C++如何从文件中设置字符串变量
- 设置字符串为v8 Array
- 通过指针在结构中设置字符串时发生C++错误
- 如何在c++类中设置c字符串的默认值