1

CreateWindowEx を使用して単純な Group-Box-Control を作成する際に問題があります。キャプションのフォントサイズ/スタイルが正しくありません。

Visual Studio - Resource Manager を使用して、単純な Windows ダイアログ (グループ ボックス、ボタンなどを含む) を作成しました。そのダイアログを DialogBox(…) で読み込むと、すべて正常に見えますが、CreateWindowEx(…) を介して同じダイアログに別のグループ ボックス コントロールを作成すると、新しいコントロールのキャプションのフォント サイズ/スタイルが異なります。

Microsoft Spy++ では、他のグループ ボックスの dwExStyle と dwStyle の値を確認できましたが、CreateWindowEx で同じ値を使用しても、外観が異なります。

新しいグループ ボックスを作成するために使用するコードは次のとおりです。

HWND hGroup1 = GetDlgItem(_hWnd, IDC_GROUPBOX1);
HWND hGroup2 = CreateWindowEx(            
    WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_NOPARENTNOTIFY,
    L"Button",
    L"Hallo",
    WS_CHILDWINDOW | WS_VISIBLE | BS_GROUPBOX,
    20, 20, 250, 250,
    hGroup1,
    nullptr,
    _hInstance,
    nullptr);

ダイアログのスクリーン キャプチャを次に示します。

http://imageshack.us/photo/my-images/856/groupboxfontissue.png/

どこが間違っていたのか、それを修正するために何ができるのか教えてください。

[編集-1]

ジョナサン・ポッターとスーパーマンに関しては、あなたが提案したように、新しいグループ ボックスのフォント ハンドルを他のコントロールと同じに設定しました。

HFONT hFont1 = (HFONT)SendMessage(hGroup1, WM_GETFONT, 0, 0); 
HFONT hFont2 = (HFONT)SendMessage(hGroup2, WM_GETFONT, 0, 0);
HFONT hFont3 = (HFONT)SendMessage(_hWnd, WM_GETFONT, 0, 0);
SendMessage(hGroup2, WM_SETFONT, (WPARAM)hFont1, TRUE);

hFont2 = (HFONT)SendMessage(hGroup2, WM_GETFONT, 0, 0);

このコードの最後で、すべてのコントロールとダイアログ ウィンドウのフォント ハンドルが同じであることがわかりますが、Resource Manager で作成されたコントロールのみが正しいフォント (システム フォント) を持っています。

他に何かできることはありますか???

[編集-2]

信じられない…今は動く!お世話になりました皆様、誠にありがとうございました!

CreateWindowEx(…) の hWndParent 値をダイアログ ハンドルに設定し、WM_GETFONT と WM_SETFONT を使用して適切なフォントをコピーするだけで済みました。

良い週末をお過ごしください。

4

2 に答える 2

3

(CreateWindowExを介して)手動で作成したコントロールは、フォントセットを自動的に取得せず、デフォルトで「システムフォント」(スクリーンショットに表示されているもの)になります。代わりに、コントロールの作成後にコントロールのフォントを設定する必要があります。例えば、

SendMessage(hGroup2, WM_SETFONT, (WPARAM)SendMessage(hGroup1, WM_GETFONT, 0, 0), TRUE);
于 2012-06-16T06:28:32.910 に答える
1

リソース エディターを使用してダイアログにコントロールを配置すると、コントロールの親であるダイアログに設定されたフォントが既定で使用されます。

コントロールを動的に作成している場合、ダイアログのフォントの代わりにシステム フォントが使用されます。

動的に作成するコントロールのダイアログと同じフォントを取得するには、WM_INITDIALOG ハンドラでダイアログのフォントをコントロールに設定します。

以下のコード スニペットで、m_hWnd を親ダイアログのハンドルに置き換えます。

HFONT font = (HFONT)::SendMessage(m_hWnd, WM_GETFONT, 0, 0);
::SendMessage(hGroup2, WM_SETFONT, (WPARAM)font, TRUE);
于 2012-06-16T07:47:05.650 に答える