c++ - 在模态对话框中显示一个图标
问题描述
我对 MFC 完全陌生,并且已经在这个问题上工作了几天,但找不到任何有效的解决方案。
问题:
我有一个对话框类(模态对话框),其样式在 .rc 文件(下面的代码)中定义,并从另一个类(OtherClass.rc)获取图标的资源 ID(int m_icon
与 相同IDR_MAINFRAME
)。对话框内的所有文本信息都是动态设置的(下面的代码),但同样不适用于图标。下图中标记的图标是我要设置的。
图标资源在另一个 .rc 文件中定义,并且 LoadImage 似乎可以工作,因为我可以在窗口左上角设置小图标。唯一的问题是在此图像中设置大图标。(根本没有显示,只是一个空白)
其他类.rc
IDR_MAINFRAME ICON "res\\MyIcon.ico"
对话框.rc
ABOUTBOX DIALOGEX 0, 0, 285, 77
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "<<Aboutbox>>"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
ICON ABOUT_ICON, ABOUT_ICON, 11, 10, 21, 20
LTEXT "", IDC_STATIC, 40, 10, 163, 8, SS_NOPREFIX
LTEXT "<<Package Name 1.00>>", ABOUT_NAME, 40, 20, 163, 8, SS_NOPREFIX
LTEXT "<<FileName>>", ABOUT_FILENAME, 40, 30, 163, 8, SS_NOPREFIX
DEFPUSHBUTTON "OK", IDOK, 217, 7, 60, 14, WS_GROUP
END
对话框.cpp
BOOL AboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Window Title
SetWindowText(L"About " + m_title);
// Set Icon
HICON hIcon = (HICON)LoadImage(GetModuleHandleW(NULL), MAKEINTRESOURCE(m_icon), IMAGE_ICON, 96, 96, LR_DEFAULTCOLOR);
SetIcon(hIcon, TRUE);
SetIcon(hIcon, FALSE);
// Text
SetDlgItemText(ABOUT_NAME, m_name);
SetDlgItemText(ABOUT_FILENAME, m_filename);
return TRUE;
}
我尝试做的是:
1. GetDlgItem(ABOUT_ICON)->SetIcon(hIcon, TRUE);
2. SendMessage(WM_SETICON, ICON_BIG, (LPARAM)hIcon);
还有更多类似的东西,但图标空间仍然是空的。the 和 the都LoadImage
没有GetDlgItem(ABOUT_ICON)
返回 a nullptr
(已经检查过了)。
解决方案
你不应该做任何事情,SetIcon
或者SendMessage
让一个图标来显示。问题是您的 RC 文件有误。它应该如下所示:
ABOUTBOX DIALOGEX 0, 0, 285, 77
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "<<Aboutbox>>"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
ICON ABOUT_ICON, IDC_STATIC, 11, 10, 21, 20
LTEXT "", IDC_STATIC, 40, 10, 163, 8, SS_NOPREFIX
LTEXT "<<Package Name 1.00>>", ABOUT_NAME, 40, 20, 163, 8, SS_NOPREFIX
LTEXT "<<FileName>>", ABOUT_FILENAME, 40, 30, 163, 8, SS_NOPREFIX
DEFPUSHBUTTON "OK", IDOK, 217, 7, 60, 14, WS_GROUP
END
看看ICON
一行之后的BEGIN
行。
您将其设置为ABOUT_ICON, ABOUT_ICON, 11, 10, 21, 20
,但第二个参数告诉框架控件的 ID 是什么。由于您想要一个Static
控件,因此您使用它的 IDIDC_STATIC
告诉框架没有 ID,但它应该创建一个通用Static
控件。
如果这不能解决它,我会调查是否ABOUT_ICON
正确连接,它实际上指向一个图标。
另外,你为什么在 RC 文件中工作?MFC 为您提供了一个很棒的 GUI 编辑器。例如,您可以使用 UI 对其进行修改:
推荐阅读
- facebook - 接受 Facebook 系统用户的非歧视政策
- cvxpy - 目标不是 DCP。它的下列子表达式不是
- node.js - AWS Lambda | 从 S3 读取多个文件 | 创建组合 JSON | 面临性能问题
- javascript - 如何从包含日期范围的字符串中提取年份 [Typescript/Angular]
- swift - 如何在 iOS 13 上共享文本和 URL 到提醒事项
- excel - Excel 多级数组公式与部分字符串匹配以求和结果单元格
- mongodb - 基于ObjectID的Mongodb Aggregation中的查询问题
- reactjs - React 函数的返回类型是什么
- ios - 提交到 AppStore Connect 时不支持 iOS 13
- angular - Angular 8后退按钮和参数