【问题标题】:WinAPI Combo Box Issue - Skipped by caseWinAPI 组合框问题 - 按大小写跳过
【发布时间】:2012-03-01 02:15:42
【问题描述】:

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

   // 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:例如这是正确的吗?如果是这样,哪些变量会发布到此部分一个布尔值?

我还尝试在 switch 语句之前添加它,它可以工作,但是选项面板被复制了很多次,给了我垃圾邮件选项。

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

提前致谢

【问题讨论】:

    标签: c winforms winapi combobox


    【解决方案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 源代码,而您进行声明的方式甚至不会编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-21
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2010-11-18
      • 2013-07-20
      相关资源
      最近更新 更多