2017-10-20 64 views
2

私の質問は、Windows MFCアプリケーションのコンボボックスについてです。MFCアプリケーションのコンボボックス

コンボボックスのドロップダウン部分には、ビットマップと文字列で構成される項目が含まれます。

時には文字列が長すぎるため、CComboBox::SetDroppedWidth()メソッドを使用してコンボボックスのドロップダウン部分の幅を調整する必要があります。

私の問題は、コンボボックスがコンピュータ画面の右端付近にあるときに、ドロップダウンの右部分が非表示になっていることです(後述のimage_1およびimage_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_cbXmodelsCComboBoxExオブジェクトであることを忘れていました。これがハンドルがNULLである理由です。 GetComboBoxCtrl()を介してハンドルを手に入れることができました...

+3

[コンボボックスを強制的に下の[ドロップダウン]にする](https://stackoverflow.com/questions/36307412/forcing-a-combobox-to-dropdown-above-instead-of-below) –

答えて

3

ハンドルCBN_DROPDOWNを通知します。

GetComboBoxInfoでリストコントロールのハンドルを取得します。

MoveWindowを使用して、必要に応じてウィンドウを調整します。

現在の画面サイズの取得はMonitorFromWindowで利用できます。 MONITORINFOrcWorkメンバーを参照してください。左右の座標を調整するだけです。

EDIT:コメントで読めるように:私の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); –

関連する問題