2017-10-20 131 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); –

相關問題