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

标签 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 部分?

我也尝试在 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 ; 
} 

提前致谢

最佳答案

我怀疑当您尝试将它放入 WM_INITDIALOG 时,您犯了一个常见的错误,即没有在 block 周围放置大括号:

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。这是记录在案的一些消息的异常(exception)情况 here .

我做的最后一件事是将您的声明移动到每个范围的开头。我假设您的文件是 .cpp,即使您看起来是在编写 C。如果您的扩展名是 .c,VC++ 会将文件视为 C 源代码,并且按照您的方式处理正在做你的声明甚至不会编译。

关于c - WinAPI 组合框问题 - 按案例跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9509691/

相关文章:

c - 如何在编译模块时集成 Module.symvers

c# - 在C#中,有没有办法始终如一地获取当前焦点窗口的选定文本内容?

c# - 锁定文本框中的有效字符

c - 高强制级别应用程序的持久化-windows

c++ - WinApi压缩,python3中的解压缩

C 基本环形缓冲区问题

c++ - Visual Studio 2010 C++ : malloc()/HeapAlloc always allocates new page for even smallest alloc size

c++ - C2440 无法在 C++ WinApi 中将 LRESULT 转换为 WNDPROC

c - 如何列出 C 目录中目录中的文件?

c# - 在 WinForm 应用程序中加载表单后禁用 datagridview 中的默认单元格选择