【问题标题】:Cannot change the height of a combo box in the VS Dialog Editor无法在 VS 对话框编辑器中更改组合框的高度
【发布时间】:2011-02-06 07:56:28
【问题描述】:

我创建的任何组合框似乎都停留在 12 个对话框单元的高度。 Microsoft 关于对话框中控件的间距和大小的指南规定组合框的高度应为 14 个对话框单元。

我什至尝试在记事本中编辑资源文件并在 Visual Studio 中重新编译而不打开资源编辑器 - 但组合框的大小仍然错误!

有什么想法吗?

【问题讨论】:

    标签: c++ winapi wtl


    【解决方案1】:

    您为组合框specifies the size of the combo box when it is opened 提供的高度。编辑控件部分的高度基于字体。 (或者如果您是自绘者,则根据您的物品尺寸。)

    【讨论】:

      【解决方案2】:

      就我而言,我已经处理了 WM_WINDOWPOSCHANGING 消息并更改了 WINDOWPOS 结构中的 cy 成员,它可以工作,可能会有所帮助。

      【讨论】:

        【解决方案3】:

        您可以使用 WTL::CComboBox::GetComboBoxInfo() 获取组合组件 HWND 和大小,例如在 OnInitDialog() 中:

        COMBOBOXINFO cbi = {sizeof COMBOBOXINFO}; 
        CComboBox(GetDlgItem(ID_MYCOMBO)).GetComboBoxInfo(&cbi);
        CRect rComboEdit = cbi.rcItem;
        // adjust rComboEdit to your needs
        CEdit(cbi.hwndItem).MoveWindow(rComboEdit);
        

        【讨论】:

        • 这也不起作用 -- MoveWindow 只会影响位置和宽度,高度保持不变。
        • 对不起:( ,使用 ATL::CWindow::SetWindowPos() 代替 ATL::CWindow::MoveWindow()
        • 行为与 SetWINdowPos 相同...我想这只是 ComboBox 的一个错误。但令我困扰的是,Microsoft 建议 ComboBox 的高度为 14 个 DLU,而这甚至无法通过 Win32 API 实现。哦,好的,谢谢你的尝试。
        【解决方案4】:

        现在让我们假设您要更改下拉区域(按下按钮时出现的列表)的大小。请记住,组合框过去只是一个编辑框和一个粘在一起的列表。所以我们需要以某种方式改变总宽度/高度。

        一种方法是直接在 RC 文件中编辑宽度/高度。

        VS 对话框编辑器的惊人之处在于它会默认创建一个几乎为零像素的默认“放置”区域。你根本看不到列表!

        在对话框编辑器中,将鼠标光标悬停在下拉按钮上方,直到鼠标光标变为南北向类型。然后点击,真实的边界会显示出来,你可以修改区域。

        例子:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-21
          • 1970-01-01
          • 2013-04-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多