2012-04-30 12 views
1

メインウィンドウに2つのアイテムとボタンがあるコンボボックスがあります。コンボボックス:GetWindowTextを使用してバッファ内に間違ったシンボルが表示される

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; 

私は bufは変数を参照してくださいMSVS2010にブレークポイントを使用しています。それは中国の記号が含まれています!メッセージボックスにが空のメッセージ(タイトル「エラー」)。私は英語のテキストを見たい。なにが問題ですか?

このコード

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

は、同じ中国のシンボルで BUF を埋め

SOLUTION:
hCombo =のcreateWindow(L "COMBOBOX"、L "コンボボックス"、 WS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLIST、 10,55,232,500、hWnd、(HMENU)IDC_COMBO、hInstance、0);

答えて

1

CBS_DROPDOWNLISTスタイルのコンボボックスから現在選択されているアイテムを取得するには、選択インデックスを取得するためにCB_GETCURSEL、次に文字列を取得するのにCB_GETLBTEXTが必要です。

+0

このコード:nIndex = SendMessage(hCombo、CB_GETCURSEL、0、0); SendMessage(hCombo、CB_GETLBTEXT、nIndex、(LPARAM)buf); bufを同じ中国語記号で塗りつぶします – NieAR

+0

中国語として参照する文字は、実際には初期化されていないバッファです。最初の文字はおそらくゼロで、これにより戻り値は空の​​文字列になります。これには独自の理由があります - 間違ったハンドルなど –

+0

はい。最初の文字はゼロです – NieAR

関連する問題