使用GetWindowText在缓冲区中的错误符号

时间:2012-04-30 07:42:36

标签: c++ winapi

主窗口上有两个项目组合框和按钮。组合框:

HWND hCombo;
hCombo = CreateWindow(L"COMBOBOX", L"combobox",
       WS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLIST,
       10, 55, 232, 500, hWnd, 0, hInstance, 0);

const wchar_t *langEnglish = L"English";
const wchar_t *langRussian = L"Russian";
SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)langEnglish);
SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)langRussian);
SendMessage(hCombo, CB_SETCURSEL, 0, 0);

我试图通过点击按钮在 WndProc 中获取所选项目文字:

case WM_COMMAND:                                            
{
    switch(LOWORD(wParam))
    {  
        case IDC_BUTTON_OK:
            wchar_t buf[10];
            hCombo = GetDlgItem(hWnd, IDC_COMBO);
            GetDlgItemText(hCombo, IDC_COMBO, (LPWSTR)buf, 10);
            MessageBox(hWnd, (LPCWSTR)buf, NULL, MB_OK);
            break;
    }

} break;

我在MSVS2010中使用断点来查看 buf 变量。它包含中文符号!!!消息框显示消息(标题为“错误”)。我想看英文文本。怎么了?

此代码

nIndex = SendMessage(hCombo, CB_GETCURSEL, 0, 0);
SendMessage(hCombo, CB_GETLBTEXT, nIndex, (LPARAM)buf);

使用相同的中文符号填充 buf

解决方案:
hCombo = CreateWindow(L“COMBOBOX”,L“combobox”,        WS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLIST,        10,55,232,500,hWnd,(HMENU)IDC_COMBO ,hInstance,0);

1 个答案:

答案 0 :(得分:1)

要从CBS_DROPDOWNLIST样式化的组合框中获取当前选定的项目,您需要CB_GETCURSEL来获取选择索引,然后CB_GETLBTEXT来获取字符串。