Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用GetWindowText时缓冲区中出现错误符号_C++_Winapi - Fatal编程技术网

C++ 使用GetWindowText时缓冲区中出现错误符号

C++ 使用GetWindowText时缓冲区中出现错误符号,c++,winapi,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_

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

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|u CHILD | WS|u VISIBLE | CBS|u SORT | CBS|u DROPDOWNLIST,
10、55、232、500、hWnd、(汉努)IDC\U组合,hInstance,0)

要从
CBS\u DROPDOWNLIST
样式组合框中获取当前选定的项目,您需要获取选择索引,然后获取字符串。

要从
CBS\u DROPDOWNLIST
样式组合框中获取当前选定的项目,您需要获取选择索引,然后获取字符串。

此代码:nIndex=SendMessage(hCombo,CB_GETCURSEL,0,0);SendMessage(hCombo、CB_GETLBTEXT、nIndex、(LPARAM)buf);用相同的中文符号填充buf。您称为中文的字符实际上是一个未初始化的缓冲区。第一个字符可能是零,这使得返回的值只是一个空字符串。这又有它自己的原因-错误的句柄等。那么-返回的是空字符串。为什么?错误的句柄或没有选择(在调用时项目已被删除)等。此代码:nIndex=SendMessage(hCombo,CB_GETCURSEL,0,0);SendMessage(hCombo、CB_GETLBTEXT、nIndex、(LPARAM)buf);用相同的中文符号填充buf。您称为中文的字符实际上是一个未初始化的缓冲区。第一个字符可能是零,这使得返回的值只是一个空字符串。这又有它自己的原因-错误的句柄等。那么-返回的是空字符串。为什么?手柄错误或没有选择(通话时项目已被删除)等。