我正在从我的窗口中的edittext控件检索文本的项目,并且GetWindowText()函数无法读入缓冲区并返回0,但是将SetWindowText()调用到同一控件是完美的,当窗口初始化和其他事件发生时(复选框被点击等)不确定是什么导致无法读取数据,相关代码如下:
#define IDC_SOPRANO_H 1788
INT_PTR CALLBACK Rules(HWND, UINT, WPARAM, LPARAM);
LPSTR SOP_HIGH_NOTE = "A#4";
INT_PTR CALLBACK Rules(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND SOP_HIGH_NOTE_HWND = GetDlgItem(hDlg, IDC_SOPRANO_H);
switch (message)
{
case WM_INITDIALOG:
SetWindowText(SOP_HIGH_NOTE_HWND, SOP_HIGH_NOTE);
return (INT_PTR)TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
GetWindowText(SOP_HIGH_NOTE_HWND, SOP_HIGH_NOTE, 4);
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
}
答案 0 :(得分:2)
SOP_HIGH_NOTE
是指针,不是分配的缓冲区。您声明它最初指向字符串文字,该文字存在于进程的只读数据中。将该指针传递给GetWindowText()
将尝试写入该只读内存块。
请改为尝试:
TCHAR SOP_HIGH_NOTE[] = TEXT("A#4");
它在内存中声明了一个实际的读/写缓冲区,并用字符串文字的内容预先填充它,而不是指向文字本身的内存地址。