【问题标题】:MFC Combo-Box Control is not showing the full list of items when I click the drop-down menu当我单击下拉菜单时,MFC 组合框控件未显示完整的项目列表
【发布时间】:2011-01-31 13:54:09
【问题描述】:

我在 MSVS 2008 中编写了一个应用程序,它有一个 ComboBox 控件,我通过以下代码对其进行初始化:

static char*                    OptionString[4] = {"Opt1",
                                                   "Opt2",
                                                   "Opt3",
                                                   "Opt4"};


BOOL CMyAppDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

 // Set the icon for this dialog.  The framework does this automatically
 //  when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE);   // Set big icon
 SetIcon(m_hIcon, FALSE);  // Set small icon

    // TODO: Add extra initialization here

    m_Option.AddString(OptionString[0]);
    m_Option.AddString(OptionString[1]);
    m_Option.AddString(OptionString[2]);
    m_Option.AddString(OptionString[3]);
    m_Option.SetCurSel(0);

    return TRUE;  // return TRUE  unless you set the focus to a control
}

在上面的代码中,m_Option 是 ComboBox 控件的 Control 变量。

现在,当我构建应用程序并单击向下箭头时,下拉框仅显示第一个选项(因为我已通过代码选择了该选项)。但是,如果我按下键盘上的向下箭头键,它会按照我插入的顺序循环选择选项,但它永远不会在框中显示超过 1 个选项。因此,如果用户想要选择选项 3,他必须循环选择选项 1 和 2 !虽然一旦我使用键盘选择了任何选项,相应的事件处理程序就会被触发,但我对这种行为感到很恼火,这是可以理解的。

我也列出了组合框控件的属性 - 只有属性为真(其余设置为假):

  1. 类型 - 下拉列表
  2. 垂直滚动条
  3. 可见的制表符

这已经困扰了我好几个星期了。谁能赐教?

【问题讨论】:

    标签: visual-c++ visual-studio-2008 drop-down-menu combobox mfc


    【解决方案1】:

    在对话框布局设计器中,在设计对话框时,单击组合框上的“向下箭头”。然后,您可以向下拖动组合框轮廓的底部以增加其高度。

    【讨论】:

    • MFC 太烂了!!这应该是一个属性....别人怎么会知道!无论如何,对于坚持使用 MFC 的 ppl(像我一样),这是一个很好的链接:eggheadcafe.com/software/aspnet/29801328/…
    • 公平地说,这不是 MFC 的东西,它是本机代码对话框设计器的东西 - 早于 MFC。并且这些通用控件早于我们认为的“控件”概念,具有属性等。而且就其价值而言,MFC 比 C 中的直接 API 编程要好得多!但是你是对的,如果你不知道这个设置组合框下拉高度的习惯用法,你就不可能自己找到它。
    • 哇,对于我们这些来自 C# 和 VS2008-10 的人来说,从未使用过早于 C# 的任何东西,这似乎非常不直观。相当有信心,如果没有这个问题,我永远不会想到这一点。谢谢!
    • @TCSGrad:控制最小值的成员。可见项目的数量被恰当地命名为 CComboBox::SetMinVisibleItems 并正确记录。
    • 你!得救了!我的!天!
    【解决方案2】:

    你需要在设计器中增加组合框的下拉高度。

    默认情况下,您可以通过设计器调整组合框的宽度。如果你想调整下拉列表的高度,你需要点击右边的下拉箭头,然后你就可以调整下拉控件的高度。这看起来很简单,但如果没有人告诉你,这不是直观的。

    希望你明白我的意思。

    【讨论】:

    • 怎么做?你能至少告诉我房产名称吗?
    • 知道了....我没有看到您编辑了您的第一个答案,同时将另一个标记为答案!无论如何,感谢你们...我还提供了一个链接,它煞费苦心地描述了这个... :)
    【解决方案3】:

    另一种设置组合框下拉高度的方法是手动编辑rc文件。 您可以设置第 5 个参数,它负责下拉的高度(本例中为 72)。

    COMBOBOX   IDC_COMBOBOX1,17,35,157,72,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
    

    【讨论】:

      【解决方案4】:

      我们可以通过编程方式将下拉高度修改为:

      CRect rctCmbCountry, rctDropDownCountry;
      m_Cmb_Country.GetClientRect(&rctCmbCountry); 
      m_Cmb_Country.GetDroppedControlRect(&rctDropDownCountry); 
      itemHeight = m_Cmb_UI_Country.GetItemHeight(-1); 
      m_Cmb_UI_Country.GetParent()->ScreenToClient(&rctDropDownCountry); 
      rctDropDownCountry.bottom = rctDropDownCountry.top + rctCmbCountry.Height() + itemHeight * iNoOfITemToShowInComboDropDown; 
      m_Cmb_UI_Country.MoveWindow(&rctDropDownCountry);
      

      参考:http://codetechnic.blogspot.com/2012/04/vc-mfc-how-to-set-combobox-dropdown.html#:~:text=1)%20Designer%20%2D%20through%20the%20designer,you%20it's%20anything%20but%20intuitive.

      【讨论】:

      • 感谢您的回答 - 希望 11 年后这个问题仍然有意义:P
      • 确实考虑到我花了一整天的时间试图找到解决方案:D:P
      【解决方案5】:

      我也遇到过这个问题,最后我找到了我的 MFC 应用程序的解决方案。问题是我没有将清单版本 6 应用于我的应用程序。为了解决这个问题,我添加了代码来标记清单如下:

      ifdef _UNICODE
      if defined _M_IX86
      pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
      elif defined _M_X64
      pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
      else
      pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
      endif
      endif
      

      效果很好。 您可以参考链接 [这里] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773175%28v=vs.85%29.aspx) 了解更多详情。 希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 2021-08-04
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多