1

メインウィンドウには2つのアイテムとボタンが付いたコンボボックスがあります。コンボボックス:

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);

4

1 に答える 1

1

CBS_DROPDOWNLISTスタイル付きコンボ ボックスから現在選択されている項目を取得するCB_GETCURSELには、選択インデックスCB_GETLBTEXTを取得してから文字列を取得する必要があります。

于 2012-04-30T07:47:49.990 に答える