WinAPI组合框问题 - 按案例跳过

时间:2012-03-01 02:15:43

标签: c winforms winapi combobox

大家好,我想知道是否有人能告诉我我做错了什么我已经做了一个对话框应用程序而且除了一个问题之外我完成了所有这些问题,我将这些问题添加到标签页并且它们由处理程序调用下面。我的问题是在哪里添加组合框字段,即

   // Sets up the combo box menu 
   HWND hwndComboTab = GetDlgItem(hwndDlg, IDC_COMBO1);
   ComboBox_AddString(hwndComboTab, "Option 1");
   ComboBox_AddString(hwndComboTab, "Option 2");
   ComboBox_AddString(hwndComboTab, "Option 3");

我认为它会在WM_INITDIALOG下,但我总是遇到一个案例跳过错误。我认为它需要在里面

案例1:例如这是正确的吗?如果有的话,这个部分发布了什么变量?bool?

此外,我尝试在切换声明之前添加它并且它可以正常工作,但选项面板会多次复制,从而为我提供垃圾邮件选项。

INT_PTR CALLBACK MyTabDialogOne(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) 
{ 

   // Switches the message for tab 1 control
    switch (uMsg) 
    { 
    case WM_INITDIALOG: // Tryed here case error
        break; 
    case WM_COMMAND:      
        { 
            switch (LOWORD(wParam)) // No point here as this is after a button is clicked
            { 
    case IDC_GET_CODE: // Handles the GET Code button in tab
// Displays the result to main window
HWND hwndEdit2 = GetDlgItem(GetParent(GetParent(hwndDlg)), IDC_OUTPUT);
SetWindowText(hwndEdit2,buffer);
// Displays the result to bottom bar
HWND hwndStatic1 = GetDlgItem(GetParent(GetParent(hwndDlg)), IDC_STATIC1); 
Static_SetText(hwndStatic1, "Completed");
//MessageBox(hwndDlg,TEXT("Selected"),TEXT("Button"),0); 
            break; 
            } 
            break; 
        } 
    } 
    return FALSE ; 
} 

提前致谢

1 个答案:

答案 0 :(得分:1)

我怀疑当你试图把它放在WM_INITDIALOG时,你犯了一个常见的错误,就是不要在挡块周围放置括号:

INT_PTR CALLBACK MyTabDialogOne(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) 
{ 

   // Switches the message for tab 1 control
    switch (uMsg) 
    { 
    case WM_INITDIALOG:
        {
            HWND hwndComboTab = GetDlgItem(hwndDlg, IDC_COMBO1);
            ComboBox_AddString(hwndComboTab, "Option 1");
            ComboBox_AddString(hwndComboTab, "Option 2");
            ComboBox_AddString(hwndComboTab, "Option 3");
            break; 
        }
    case WM_COMMAND:      
        { 
            switch (LOWORD(wParam)) // No point here as this is after a button is clicked
            { 
                case IDC_GET_CODE: // Handles the GET Code button in tab
                    {
                        // Displays the result to main window
                        HWND hwndEdit2 = GetDlgItem(GetParent(GetParent(hwndDlg)), IDC_OUTPUT);
                        HWND hwndStatic1 = GetDlgItem(GetParent(GetParent(hwndDlg)), IDC_STATIC1); 
                        SetWindowText(hwndEdit2,buffer);
                        // Displays the result to bottom bar
                        Static_SetText(hwndStatic1, "Completed");
                        //MessageBox(hwndDlg,TEXT("Selected"),TEXT("Button"),0); 
                        break; 
                    }
                default:
                    return FALSE;
            } 
            break; 
        } 
    default:
        return FALSE; 
    }

    return TRUE;
} 

不添加大括号会导致跳过hwndComboTab的声明。我还整理了你的退货声明。如果您处理了邮件,则应返回TRUE,否则返回FALSE。除了记录的here之外的一些消息,这是例外。

我做的最后一件事是将你的声明移到每个范围的开头。我假设您的文件是.cpp,即使您似乎正在编码C.如果您的扩展名为.c,VC ++会将该文件视为C源代码,而您执行声明的方式甚至无法编译