c ++ win32:向ComboBox添加值

时间:2012-04-06 18:48:54

标签: c++ winapi combobox

我确定这个问题对于所有专家来说都很容易,但我是C ++的新手并试图在我的程序中添加一个comboBox到“Option”对话框,我已经完成了以下操作,但仍然看不到任何问题组合框中的项目,请您告诉我这里缺少什么。

Resourse.h中的

#define IDD_TRIGGER_MODE 201

Project.rc中的

COMBOBOX IDD_TRIGGER_MODE, 64,22,68,14,WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN

在.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;
}

我为了解决这个问题而任意想法,谢谢

2 个答案:

答案 0 :(得分:4)

非常感谢你的帮助。但我注意到我的代码中没有问题,只是.rc文件中ComboBox的大小非常小(因为我在c ++ API中缺乏经验),所以我把它改为42现在我可以看到我的项目了。这是编辑过的代码:

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

答案 1 :(得分:3)

变化:

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

要:

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

您是否有充分的理由混合CreateWindow/Ex和资源?我假设CreateWindow/Ex,因为我发现您使用WndProc作为第一个cpp,而不是DialogProc