0

Win32 GUIアプリケーションでは、ツールバーボタンの文字列が占める領域の幅を決定して、それに応じてボタンの幅を調整する必要があります。ツールバーはプレーンな古いToolbarWindow32ウィンドウクラスです。私は次のコードを使用します:

 HDC dc = GetDC( toolbarWindowHandle );
 SIZE size;
 GetTextExtentPoint32( dc, stringToMeasure, tcslen(stringToMeasure), &size );

一部の固定文字列(たとえば「Hello」)size.cxはたとえば72で埋められますが、ボタンにまったく同じ文字列が表示されたツールバーのスクリーンショットを作成すると、文字列がたとえば56ピクセルを占めることがわかります。

違いは明らかにシステムフォント設定に依存します。私は「大きなフォント」を使用していますが、コードによって取得される値は、画面に表示されている値よりも大きくなっています。「小さいフォント」を使用するマシンでは、取得される値は小さくなります。

ウィンドウデバイスのコンテキストでGetTextExtentPoint32()を使用すると、正確に正しいサイズが返されると思いました。私は何が間違っているのですか?

4

1 に答える 1

3

ツールバーで使用されているフォントはDCで選択されないため、使用しているフォントを確認し、コピーを作成してDCで選択し、サイズを取得してからフォントを選択する必要があります(それ以外の場合はリソースリークが発生する可能性があります)。現在、私が期待するシステムフォントのサイズ、またはデフォルトのDCフォントが何であれ取得します。

ツールバーウィンドウにWM_GETFONTメッセージを送信して使用されているフォントハンドルを見つけることもできますが、テキストが表示されているときに使用されている実際のフォントが返されるとは限りません。それはすべて、ツールバーが内部でどのように機能するかに依存します。

ただし、Win32ツールバーがボタンテキストのレンダリングにメニューフォントを使用していることは間違いありません。これは、SystemParametersInfoとNONCLIENTMETRICS構造の組み合わせを使用して検出できます。

私が仕事をしているなら、私はいくつかのコードを投稿します。

Win32が好きではありませんか?

ところで、私はツールバーのボタンテキスト機能を使用しており、この方法でボタンのサイズを手動で変更する必要はありませんでした。

http://msdn.microsoft.com/en-us/library/ms724947(VS.85).aspx http://msdn.microsoft.com/en-us/library/ms724506(VS.85).asp

于 2009-10-30T19:58:39.253 に答える