我確定這個問題對於所有的專家來說都是如此的容易,但我是C++的新手,並試圖在我的程序中添加一個組合框到「選項」對話框中,我做了以下工作,但仍然無法看到組合框中的任何項目,請告訴我我在這裏錯過了什麼。C++ win32:將值添加到組合框
在Resourse.h:#define IDD_TRIGGER_MODE 201
: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;
}
我用它來解決任何想法來解決t他的問題,謝謝
關於此的reinterpret_cast((LPCTSTR)模式[COUNT]));你爲什麼傳遞模式[Count]?它看起來不正確。只是一個想法。 –
octopusgrabbus
2012-04-06 18:54:48
,因爲我想傳遞數組中的值。你有什麼建議? – user261002 2012-04-06 18:57:25
您是否驗證了'GetDlgItem()'返回了一個非NULL'HWND'? SendMessage(CB_ADDSTRING)'的返回值是什麼?如果成功,它將返回插入字符串的索引。最後,你正在將'char *'投射到'LPCTSTR'。如果您的應用程序是啓用Unicode編譯的,則'LPCTSTR'將映射到'wchar_t *'而不是'char *'。您不能將'char *'強制轉換爲'wchar_t *'。你應該改變你的數組來保存'TCHAR *'條目而不是'char *'條目。 – 2012-04-06 19:34:53