我确定这个问题对于所有的专家来说都是如此的容易,但我是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