C++技巧:加载图标LoadIcon,SetIcon

C++技巧:加载图标LoadIcon,SetIcon,第1张

C++技巧:加载图标LoadIcon,SetIcon,第2张

HICON load icon(h instance h instance,LPCTSTR lpIconName);
1。函数描述:
此函数从与hInstance模块关联的可执行文件中加载lpIconName指定的图标资源。只有当图标资源尚未加载时,该函数才执行加载操作,否则,只获取已加载资源的句柄
2。参数描述:lpIconName是指向以空字符结尾的字符串的指针。它包含图标名称。如果要使用windows预定义的图标,这是必须设置为NULL的hin instance,LpIconName可以是以下值:
Idi _ application:32512 Idi _ question:332514
Idi _ hand:32513 Idi _ exemption:32515
Idi _ Asterisk:32516 Idi _ winlogo:32517
可以浏览图标
void c mydlg::的ModifyStyle(0,SS _ ICON);//m_static1是静态文本的关联变量
m _ static 1 . seticon(::loadicon(null,(lpctstr)(32512+I)));
i++;
if(I > = 6)
I = 0;
}
注意,以上应该是cast。
在MFC中:
这个成员函数封装在CWinApp中,有两种:
hiconloadicon(lpctstr lpszresourcename)const;
HICON load icon(UINT NID resource)const;
所以如果添加了一个资源,它的ID是IDI_ICON1,直接调用它:
afxgetapp()-> loadicon(IDI _ icon 1);
但是,该方法不能加载系统预定义的图标。CWinApp中还有一个加载图标的函数:
hiconloadstandardicon(lpctstr lpszicon name)const;
如:
afxgetapp()--> loadstandardicon(idi _ question);
MFC与SDK的连接
当然,在MFC中可以调用全局函数来加载图标,但如果要加载自己的图标资源,要注意以下几种方式:
::loadicon(afxgetapp()--> m _ hint,(lpctstr)idi _ icon 1);
::load icon(AfxGetApp()--> m _ h instance,MAKEINTRESOURCE(icon 1));
::load icon(AfxGetInstanceHandle(),,MAKEINTRESOURCE(icon 1));
以上都是正确的。由于添加的图标资源ID不是字符类型(在resource.h中,所以要转换:
提示:将LPCTSTR强制放在前面
,用MAKEINTRESOURCE
转换。其定义如下:
# define MakeInTreSource(I)(lpctstr)((dword)((word)(I))),以及
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//添加“关于...”系统菜单的菜单项。
// IDM_ABOUTBOX必须在系统命令范围内。
ASSERT((IDM _ about box & 0x fff 0)= = IDM _ about box);
ASSERT(IDM _ about box < 0xf 000);
CMenu * psys menu = get system menu(FALSE);
if (pSysMenu!= NULL)
{
CString strabout menu;
strAboutMenu。LoadString(IDS _ about box);
如果(!斯特拉布特菜单。IsEmpty())
{
psys menu-> AppendMenu(MF _ SEPARATOR);
psys menu-> append menu(MF _ STRING,IDM_ABOUTBOX,strabout menu);
}
}
SetIcon(m _ hIcon,TRUE);
SetIcon(m_hIcon,FALSE);
}
那么m_hIcon是哪里定义的呢?
class CMyDlg:public CDialog
{
....
受保护:
HICON m _ HICON;
}
提示:那么m_hIcon是从哪里加载的呢?
cmy DLG::cmy DLG(CWnd * p parent/* = NULL */)
:CDialog(cmy DLG::IDD,p parent)
{
/{ { AFX _ DATA _ INIT(cmy DLG)
//注意:ClassWizard将在此处添加成员初始化
/} } AFX _ DATA _ INIT
//注意LoadIcon在Win32中不需要后续的DestroyIcon
}
其中IDR_MAINFRAME可以在参考资料中找到。
所以如果想改变图标,可以自己重写m_hIcon,或者在OninitDialog中写:
seticon (::loadicon (null,idi _ application),false
SetIcon(::LoadIcon(NULL,IDI _应用),TRUE);
提示:SetIcon,它的第二个参数是BOOL。如果为真,说明程序显示的图标是关闭的,就是快捷方式等图标。如果为FALSE,则是在编程、最小化或正常显示时标题栏上的图标。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++技巧:加载图标LoadIcon,SetIcon

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情