Недавно я столкнулся с очень странным поведением элемента управления Windows «Button» в стиле BS_MULTILINE, который выглядит как ошибка в Windows. Чтобы воспроизвести это, сделайте следующее:
(1) Создать новый проект с помощью Visual Studio 2012 Project Wizard; выберите «Приложение MFC»;
(2) На странице «Тип приложения» выберите «На основе диалога» + «Стандарт MFC»;
(3) На странице «Расширенные функции» оставьте только «Общий контрольный манифест»;
(4) В сгенерированный файл «Resource.h» добавьте строку #define IDC_LONG_TEXT 103
;
(5) В сгенерированном <название проекта>Файл .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) В сгенерированном <название проекта>Файл 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) Постройте и запустите программу. Вы увидите, что текст кнопки нарисован в верхнем правом углу кнопки. Если вы прокомментируете последнюю строку в приведенном выше коде, текст будет нарисован правильно.
Кто-нибудь сталкивался с такой же проблемой? Это действительно ошибка? Если да, то как это можно отправить в Microsoft?
Задача ещё не решена.