win32 c ++中的GetWindowText()不起作用

时间:2011-12-29 04:44:20

标签: c++ winapi textbox

我正在从我的窗口中的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;
        }
}

1 个答案:

答案 0 :(得分:2)

SOP_HIGH_NOTE是指针,不是分配的缓冲区。您声明它最初指向字符串文字,该文字存在于进程的只读数据中。将该指针传递给GetWindowText()将尝试写入该只读内存块。

请改为尝试:

TCHAR SOP_HIGH_NOTE[] = TEXT("A#4");

它在内存中声明了一个实际的读/写缓冲区,并用字符串文字的内容预先填充它,而不是指向文字本身的内存地址。