2017-10-20 132 views
2

我的问题是关于Windows MFC应用程序中的组合框。MFC应用程序中的组合框

组合框的下拉部分包含由位图和字符串组成的项目。

有时,字符串太长,我必须使用CComboBox::SetDroppedWidth()方法来调整组合框下拉部分的宽度。

我的问题是当组合框靠近计算机屏幕的右边缘时,隐藏下拉框的右侧部分(请参阅下面的image_1image_2)。

我希望它的行为与Excel类似(请参阅下面的image_3),这意味着我希望将下拉列表相应地移动,以便可以在不裁剪的情况下看到所有项目。

这是如何实现的?

IMAGE_1:下拉菜单的右侧部分没有隐藏 right part of the dropdown is NOT hidden

IMAGE_2:计算机右边缘附近,在下拉列表的右侧部分被隐藏 right part of the dropdown is hidden

image_3:Excel组合框 Excel combo box

=========================================== ======================

EDIT 1 handles are null

================ =================================================

编辑2

好的。我忘了提及m_cbXmodels是一个CComboBoxEx对象。这就是句柄为NULL的原因。我可以通过GetComboBoxCtrl()获取句柄...

+3

可能的重复[强制组合框到“下拉”而不是下面](https://stackoverflow.com/questions/36307412/forcing-a-combobox-to-dropdown-above-instead-of-below) –

回答

3

处理CBN_DROPDOWN通知。

GetComboBoxInfo获取列表控件的句柄。

现在使用MoveWindow根据需要调整窗口。

获取当前屏幕尺寸可用MonitorFromWindow。请参阅MONITORINFO中的rcWork成员。你只需要调整左右坐标。

编辑:正如你可以阅读的评论:我的方法与CBN_DROPDOWN是早期感谢zett42)。这里无法调整组合框列表部分的大小。
但是可以将用户定义的消息发布到同一窗口并重新定位窗口。

+0

谢谢。当我调用GetComboBoxInfo()时,我注意到列表控件的句柄是NULL(hwndCombo,hwndItem和hwndList是NULL)。 –

+0

您必须预设cbSize会员! – xMRi

+0

新问题:下拉列表不移动。代码是:HWND hwndList = info.hwndList; :: MoveWindow(hwndList,40,40,100,100,1); –

相关问题