4

背景: 特定のダイアログには、複数のコントロールが並んでいます。見た目の高さをすべて同じにしたいのです。ただし、CBS_DROPDOWNLIST スタイルがあり、CBS_OWNERDRAW* がないコンボボックスの場合、見かけの高さを変更するのに問題があります。

質問: このような DROPDOWNLIST コンボボックスの見かけの高さを変更するにはどうすればよいですか?

コンボボックスでは SetWindowPos で高さを変更できないことは承知しています。ただし、wParam= -1 を指定して CB_SETITEMHEIGHT メッセージを送信すると、高さが変更されるはずだという印象を受けました。このメソッドは、CBS_OWNERDRAWFIXED スタイルが設定されたコンボボックスで機能します (「ボタンのような」外観を維持するために、このスタイルを設定することは避けたかったのです)。

環境: 私の Win32 アプリケーションは Common-Controls 6.0 を使用しており、ビジュアル スタイルが有効になっている環境 (Windows 7、Aero) での外観が気になります。

4

1 に答える 1

3

これは不可能だと思います。

あなたが言及したように、どちらSetWindowPosMoveWindowあなたが期待するようには機能しません。これは、ComboBox の高さにドロップダウンの高さが含まれるためです。コントロールは、使用するフォントのサイズに応じて自動的にサイズ変更されます。したがって、サイズを変更するには、WM_SETFONTメッセージを送信してコントロールのフォントのサイズを変更します。

しかし、なぜこれが問題なのかわかりません。一連のコントロールの高さを同じにしたいと言いますが、他のコントロールの高さを変更しない限り、それらはすでに一致しているはずです。通常、ダイアログのすべてのコントロールは同じフォントを使用するため、コンボ ボックスとテキスト ボックスはすべて同じ高さにする必要があります。共通コントロールの v6 を使用し、Visual Styles が有効になっている場合、それらはこれらすべてのコントロールに適用され、統一された外観を持つ必要があります。高さを手動でいじる必要はありません。

于 2013-05-30T09:30:01.173 に答える