进行一个从窗口中的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;
}
}
最佳答案
SOP_HIGH_NOTE
是指针,而不是分配的缓冲区。您声明它最初指向一个字符串文字,该文字存在于进程的只读数据中。将该指针传递给GetWindowText()
将尝试写入该只读存储器块。
尝试以下方法:
TCHAR SOP_HIGH_NOTE[] = TEXT("A#4");
那会在内存中声明一个实际的读/写缓冲区,并用字符串文字的内容预填充它,而不是指向文字本身的内存地址。