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