5

この質問はすべての専門家にとって非常に簡単ですが、私はC ++を初めて使用し、プログラムの[オプション]ダイアログにコンボボックスを追加しようとしています。次のことを実行しましたが、コンボにアイテムが表示されません。ボックスここで私が欠けているものを教えてください。

Resourse.hで:#define IDD_TRIGGER_MODE 201

Project.rc内:COMBOBOX IDD_TRIGGER_MODE, 64,22,68,14,WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN

.cppファイルのいずれか私はfolliwngコードを持っています:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
case WM_COMMAND:    
    ///Other codes///
        case IDM_OPTIONS:       

    g_hToolbar = CreateDialog(hInst, MAKEINTRESOURCE(IDD_OPTION_BOX), hWnd, ToolDlgProc);
    if(g_hToolbar != NULL)
    {
        ShowWindow(g_hToolbar, SW_SHOW);
    }        
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
///Other codes///
}

ToolDlgProc関数:

INT_PTR CALLBACK ToolDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
 HWND fgModes;

switch (message)
{
case WM_INITDIALOG:
     fgModes = ::GetDlgItem(hDlg, IDD_TRIGGER_MODE);
  fgModes = GetDlgItem(hDlg, IDD_TRIGGER_MODE); 
     if(fgModes!=NULL){
     if(SendMessage(fgModes,CB_ADDSTRING,0, reinterpret_cast<LPARAM (_T("FreeRun")))==NULL){            
        return (INT_PTR)FALSE ;          
     }                  
    return (INT_PTR)TRUE;
     }

case WM_COMMAND:
    if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
    {
        EndDialog(hDlg, LOWORD(wParam));
        return (INT_PTR)TRUE;
    }
    break;
}
return (INT_PTR)FALSE;
}

私はこの問題を解決するためのアイデアにそれを適用します、ありがとう

4

2 に答える 2

6

手伝ってくれてどうもありがとう。しかし、コードに問題がなかったことに気付きました。.rcファイルのComboBoxのサイズが非常に小さかったため(c ++ APIの経験が不足しているため)、42に変更してアイテムを表示できるようになりました。これが編集されたコードです:

COMBOBOX IDD_TRIGGER_MODE, 64,22,69,42,WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST

于 2012-04-07T17:03:35.073 に答える
3

変化する:

SendMessage(fgModes,CB_ADDSTRING,0, reinterpret_cast<LPARAM>("FreeRun"));

に:

SendMessage(fgModes,CB_ADDSTRING,0, reinterpret_cast<LPARAM>(_T("FreeRun")));

CreateWindow/Exまた、混合とリソースを使用している正当な理由はありますか?私はあなたが最初のcppにCreateWindow/Exを使用しているのを見て、ではなくを使用していると思います。WndProcDialogProc

于 2012-04-06T20:46:10.247 に答える