最近我遇到了Windows" Button"的非常奇怪的行为。具有BS_MULTILINE样式的控件,看起来像Windows中的bug。要重现它,请执行以下操作:
(1)使用Visual Studio 2012项目向导创建新项目;选择" MFC应用";
(2)On"应用类型"页面选择"基于对话框" +" MFC标准";
(3)On"高级功能"页面仅保留"公共控制清单";
(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)构建并运行程序。您将看到按钮文本绘制在按钮的右上角。如果您对上面代码中的最后一行进行注释,则会正确绘制文本。
有人遇到同样的问题吗?这真的是个bug吗?如果是这样,它如何提交给微软?