最近、Windows のバグのように見える、BS_MULTILINE スタイルを持つ Windows の「ボタン」コントロールの非常に奇妙な動作に直面しました。再現するには、次のようにします。
(1) Visual Studio 2012 Project Wizard で新しいプロジェクトを作成します。「MFC アプリケーション」を選択します。
(2) [アプリケーションの種類] ページで、[ダイアログ ベース] + [MFC 標準] を選択します。
(3) [高度な機能] ページでは、[共通コントロール マニフェスト] のみを保持します。
(4) 生成された「Resource.h」ファイルに次の行を追加します#define IDC_LONG_TEXT 103
。
(5) 生成された <project-name>.rc ファイルで、メイン ダイアログ定義内の "TODO" 静的テキストを次の行に置き換えます。
LTEXT "BUG IN WINDOWS COMMON CONTROLS.\nButton containing image and text does not work with BS_MULTILINE style.",IDC_STATIC,10,10,250,20
PUSHBUTTON "Very Long Text.",IDC_LONG_TEXT,10,35,250,45,BS_LEFT | BS_TOP | BS_MULTILINE | BS_FLAT
(6) 生成された <project-name>Dlg.cpp ファイルのOnInitDialog()
ハンドラーで、"TODO" コメント行の後に次のコードを追加します。
CString strOrigText, strLongText;
CWnd* pButton = GetDlgItem(IDC_LONG_TEXT);
pButton->GetWindowText(strOrigText);
for (int i = 0; i < 10; ++i)
strLongText += strOrigText;
pButton->SetWindowText(strLongText);
pButton->SendMessage(BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)m_hIcon);
(7) プログラムをビルドして実行します。ボタンのテキストがボタンの右上隅に描画されていることがわかります。上記のコードの最後の行をコメントすると、テキストが正しく描画されます。
誰も同じ問題に直面していますか?それは本当にバグですか?もしそうなら、どのようにマイクロソフトに提出できますか?