您现在的位置是:首页 > 电脑技术查询 > 电脑知识

loadicon

编辑:chaxungu时间:2022-09-28 09:39:51分类:电脑知识

hiconloadicon(hinstancehinstance,lpctstrlpiconname);
1.函数说明:
该函数从与hinstance模块相关联的可执行文件中装入lpiconname指定的图标资源,仅当图标资源还没有被装入时该函数才执行装入操作,否则只获取装入的资源句柄
2.参数说明:lpiconname是指向null字符结尾的字符串的指针,它包含图标名.如果要使用windows预定义的图标,这是hinstance必须设置成null,lpiconname则可以是下列值:
idi_application:32512idi_question:332514
idi_hand:32513idi_exclamation:32515
idi_asterisk:32516idi_winlogo:32517
可以用下面这个对话框来浏览图标
voidcmydlg::onbutton1()
{
//todo:addyourcontrolnotificationhandlercodehere
staticinti=0;
m_static1.modifystyle(0,ss_icon);//m_static1是一个静态文本的关联变量
m_static1.seticon(::loadicon(null,(lpctstr)(32512+i)));
i++;
if(i>=6)
i=0;
}
注意上面要用强制转换.
二.在mfc中:
在cwinapp中封装有该成员函数,有2种:
hiconloadicon(lpctstrlpszresourcename)const;
hiconloadicon(uintnidresource)const;
所以如果添加了资源,id为idi_icon1,调用时直接:
afxgetapp()->loadicon(idi_icon1);
但是这种方法并不能加载系统预定义图标,在cwinapp中还有个装载图标的函数:
hiconloadstandardicon(lpctstrlpsziconname)const;
如:
afxgetapp()->loadstandardicon(idi_question);
三.mfc与sdk的联系
当然在mfc中可以调用全局函数来加载图标,但是如果要装载自己添加的图标资源,要注意下面几种写法:
::loadicon(afxgetapp()->m_hinstance,(lpctstr)idi_icon1);
::loadicon(afxgetapp()->m_hinstance,makeintresource(icon1));
::loadicon(afxgetinstancehandle(),,makeintresource(icon1));
以上都是正确的.由于添加的图标资源id不是字符型的(在resource.h,所以要转换:
在前面加上lpctstr强制转换
用makeintresource转换
它的定义如下:
#definemakeintresource(i)(lpctstr)((dword)((word)(i))),它的作用就是将资源标识转换为名称字符串
四.用向导生成的对话框的图标是在哪里添加的?
boolcmydlg::oninitdialog()
{
cdialog::oninitdialog();
//add"about..."menuitemtosystemmenu.
//idm_aboutboxmustbeinthesystemcommandrange.
assert((idm_aboutbox&0xfff0)==idm_aboutbox);
assert(idm_aboutbox<0xf000);
cmenu*psysmenu=getsystemmenu(false);
if(psysmenu!=null)
{
cstringstraboutmenu;
straboutmenu.loadstring(ids_aboutbox);
if(!straboutmenu.isempty())
{
psysmenu->appendmenu(mf_separator);
psysmenu->appendmenu(mf_string,idm_aboutbox,straboutmenu);
}
}
seticon(m_hicon,true);
seticon(m_hicon,false);
}
那么m_hicon在哪儿定义的呢?
classcmydlg:publiccdialog
{
....
protected:
hiconm_hicon;
}
那么m_hicon在哪儿加载的呢?
cmydlg::cmydlg(cwnd*pparent/*=null*/)
:cdialog(cmydlg::idd,pparent)
{
//{{afx_data_init(cmydlg)
//note:theclasswizardwilladdmemberinitializationhere
//}}afx_data_init
//notethatloadicondoesnotrequireasubsequentdestroyiconinwin32
m_hicon=afxgetapp()->loadicon(idr_mainframe);
}
其中idr_mainframe在资源下面可以找到.
因此如果想更改图标的话,可以自己改写m_hicon,或者在oninitdialog中写:
seticon(::loadicon(null,idi_application),false);
seticon(::loadicon(null,idi_application),true);
这里再说说上面的seticon,它的第二个参数是bool,如果是true,就是关闭了程序显示的图标,就是常说的快捷方式之类的图标;如果是false,那么就是程序最大化,最小化或者正常显示时的标题兰上的图标.

上一篇:iedevtoolbar

下一篇:第三代语言