이 질문은 모든 전문가가 쉽게 할 수 있지만 C++을 처음 사용하고 프로그램에서 "Option"대화 상자에 comboBox를 추가하려고 할 때 다음을 수행했습니다. 하지만 여전히 콤보 상자의 항목을 볼 수 없으므로 여기에 누락 된 내용을 알려주십시오. Resourse.h에서C++ win32 : ComboBox에 값 추가
: Project.rc에서 #define IDD_TRIGGER_MODE 201
: COMBOBOX IDD_TRIGGER_MODE, 64,22,68,14,WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN
나는 folliwng 코드가 .cpp 파일의 모든 :
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;
}
나는 어떤 아이디어로도 풀 수있다.
SendMessage(fgModes,CB_ADDSTRING,0, reinterpret_cast<LPARAM>(_T("FreeRun")));
또한 당신이 CreateWindow/Ex
과 자원을 혼합하는 좋은 이유가 :
SendMessage(fgModes,CB_ADDSTRING,0, reinterpret_cast<LPARAM>("FreeRun"));
에 그의 문제는 당신
((LPCTSTR) 모드 [COUNT])); 왜 모드를 지나는거야 [Count]? 그것은 옳지 않습니다. 그냥 생각. – octopusgrabbus
배열에서 값을 전달해야하기 때문에. 너는 무엇을 제안 하는가? – user261002
'GetDlgItem()'이 NULL이 아닌'HWND'를 반환하는지 확인 했습니까? 'SendMessage (CB_ADDSTRING)'의 반환 값은 무엇입니까? 성공하면 삽입 된 문자열의 색인을 반환합니다. 마지막으로,'char * '를'LPCTSTR'에 캐스트하고 있습니다. 앱이 유니 코드를 지원하도록 컴파일 된 경우,'LPCTSTR'은'char *'대신'wchar_t *'에 매핑 될 것입니다. 'char *'를'wchar_t * '에 캐스트 할 수 없다. 'char *'엔트리 대신'TCHAR *'엔트리를 저장하도록 배열을 변경해야한다. –