1

これは Windows MFC プログラミングの問題です。独自のアイテムの描画と測定を実装する派生 CComboBox があります。リストの内容に応じてドロップダウン リストの幅を調整できるように少し拡張しました。OnDropDown メッセージ ハンドラーで SetDroppedWidth を使用してそれを行います。文字列を挿入してコンボ ボックスをクリックすると、選択した文字列のコンテンツがすべての静的/編集領域を占有し、ドロップダウン ボタンが表示されません。アイテム ID -1 を持つアイテムの幅が、ItemDraw メソッドで新しいドロップ幅に変更/リセットされていることがわかりました。これは正しい振る舞いではないと思います。新しいドロップ幅を、アイテム ID が 0 以上のリスト アイテムでのみ有効にしたいのですが、何か考えはありますか?

4

1 に答える 1

1

これを使ってみてください。

OnDropDown ハンドラでCComboBox::GetComboBoxInfo を呼び出します。構造体のポインタを返しますCOMBOBOXINFO。とりわけこの構造には、ドロップダウン リストボックスの HWND が含まれていますhwndList。この hwndList で MoveWindow() API を直接使用し、動作するかどうかを確認します

それでもうまくいかない場合は、CB_SETDROPPEDWIDTHメッセージを投稿してみてください。ご存知のように、メッセージSetDroppedWidthの単なるラッパーCB_SETDROPPEDWIDTHです。呼び出しとして実装されSendMessageます。これを試してください:

::PostMessage(m_myComboBox.GetSafeHwnd(), CB_SETDROPPEDWIDTH, nWidth, 0); 
于 2013-03-07T01:07:40.013 に答える