无法从winapi中的编辑控件获取文本
unable to get text from edit control in winapi
我无法从主窗口上的编辑控件中检索任何文本。我可以设置文本,它在绘制窗口时确实会显示,但我无法获取文本,我想在MessageBox中显示文本。我尝试了"SendMessage()"answers"GetWindowText()",但两者都做了相同的事情。看起来我检索的文本长度也是无效的,所以即使我可以在其中看到文本,编辑也没有值
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HWND addCust, editCust1, editCust2;
switch (message) {
case WM_CREATE: {
addCust = CreateWindow(L"BUTTON",L"addCust",
WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
140,70,100,25,hWnd,(HMENU)IDC_ADDCUST,NULL,NULL);
editCust1 = CreateWindowEx(WS_EX_CLIENTEDGE,L"EDIT",L"",
WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL,
50,100,200,20,hWnd,(HMENU)IDC_EDITCUST1,NULL,NULL);
editCust2 = CreateWindowEx(WS_EX_CLIENTEDGE,L"EDIT",L"",
WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL,
50,130,200,20,hWnd,(HMENU)IDC_EDITCUST2,NULL,NULL);
SendMessage(editCust1,WM_SETTEXT,NULL,(LPARAM)L"first name");
SendMessage(editCust2,WM_SETTEXT,NULL,(LPARAM)L"last name");
break;
}
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
case IDC_ADDCUST: {
TCHAR buff[64] = { ' ' };
int len = SendMessage(editCust1, WM_GETTEXTLENGTH, 0, 0);
SendMessage(editCust1, WM_GETTEXT, len+1, (LPARAM)buff);
GetWindowText(editCust1, buff, len+1);
MessageBox(NULL, buff, L"Information", MB_ICONINFORMATION);
break;
}
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
HWND addCust, editCust1, editCust2;
这是行不通的,这些都是局部变量。在WM_CREATE消息处理程序运行并且WndProc()方法退出后,它们将丢失其值。在WM_COMMAND处理程序中再次使用editCust1时,变量包含垃圾。顺便说一句,用调试器很容易看到。你需要让它们成为全局变量,这样它们才能保持它们的值。
buff声明也是错误的,它只能包含63个字符。当编辑控件实际包含64个字符或更多字符时,您将损坏堆栈帧,并(希望)使程序崩溃。使用malloc()创建一个足够大的缓冲区。
这些都是C语言编程陷阱,它们与Windows api几乎没有关系。除了"放慢速度"之外,很难给出建议,在Windows停止让你头疼之前,你确实需要知道C是如何工作的。
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 当光标位置在编辑控件 MFC 中更改时是否有通知代码?
- 为什么WS_TABSTOP不适用于丰富的编辑控件?
- 编辑控件无法正常工作
- 使用 GetWindowTextW 从编辑控件获取希伯来语文本
- 如何使用面向对象的技术在 win32 和 c++ 中创建编辑控件
- 如何检查编辑控件的滚动条是否位于底部
- C 本机Win32简单的编辑控件
- WinAPI - 如何打印文本以编辑控件
- MFC Rich编辑控件2.0文本颜色
- 编辑控件边框和WM_CTLCOLOREDIT
- 如何在对话框首次启动时禁用编辑控件的焦点?
- 十进制数字的区域设置感知编辑控件子类化(格式[sign][xxx..][decimal separator][yy.])
- 无法在编辑控件上设置字体
- c++ MFC 将编辑控件中的字符串转换为十六进制
- Win32 API:如何在编辑控件中捕获转义键?
- 如何在不显示文本的情况下分配Win32编辑控件的窗口名称
- C MFC创建编辑控件可以拥有的最大数字
- mfc c++通过编辑控件设置另一个应用程序的HWND地址