最近我遇到了具有 BS_MULTILINE 样式的 Windows“按钮”控件的非常奇怪的行为,这看起来像 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()
handler中,在“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) 编译并运行程序。您将看到按钮文本绘制在按钮的右上角。如果您在上面的代码中注释最后一行,文本将被正确绘制。
有人面临同样的问题吗?它真的是一个错误吗?如果可以,如何提交给微软?