この質問はあなたの専門家にとってはとても簡単ですが、私はC++を初めて使っていて、自分のプログラムの「オプション」ダイアログにcomboBoxを追加しようとしています。コンボボックスに項目が表示されない場合は、ここで不足していることを教えてください。 Resourse.hでC++ win32:コンボボックスに値を追加する
:Project.rcで#define IDD_TRIGGER_MODE 201
:
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機能:
私はfolliwngコードを持っている.cppファイル内COMBOBOX IDD_TRIGGER_MODE, 64,22,68,14,WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN
任意の
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;
}
私はどのようなアイデアでも解決することができます
SendMessage(fgModes,CB_ADDSTRING,0, reinterpret_cast<LPARAM>(_T("FreeRun")));
また、あなたがCreateWindow/Ex
とリソースを混合している正当な理由がある:
SendMessage(fgModes,CB_ADDSTRING,0, reinterpret_cast<LPARAM>("FreeRun"));
へ:彼の問題は、あなた
((LPCTSTR)モードは、[カウント]))。あなたはなぜモードを通過していますか?それは正しく見えません。ちょっとした考え。私は配列から値を渡したいので、 – octopusgrabbus
です。何を指示してるんですか? – user261002
'GetDlgItem()'がNULLでない 'HWND'を返すことを確認しましたか? 'SendMessage(CB_ADDSTRING)'の戻り値は何ですか?成功した場合は、挿入された文字列のインデックスを返します。最後に 'char * 'を' LPCTSTR'にキャストします。あなたのアプリケーションがUnicodeを有効にしてコンパイルされている場合、 'LPCTSTR'は' char * 'の代わりに' wchar_t * 'にマップされます。 'char *'を 'wchar_t * 'にキャストすることはできません。 'char *'エントリの代わりに 'TCHAR *'エントリを保持するように配列を変更する必要があります。 –