整容说文库 > 程序代码 > 教育资讯

如何改变应用程序的图标?(分不够再加...)

来源:学生作业帮助网 编辑:整容说文库 时间:2020/07/13 23:52:02 程序代码
如何改变应用程序的图标?(分不够再加...)程序代码
VC中如何动态改变应用程序的图标(我指的是可执行文件的)?  
我知道可以通过修改资源文件IDR_MAINFRAME静态改变,但我的程序有个参数控制产生不同的版本软件,生成的文件图标不同,每次编译时候都要复制粘贴修改IDR_MAINFRAME挺麻烦,不知如何动态改变这个图标,请指点。  
 
HICON  m_hIcon;  
 
if(ver  ==  1)  
{  
       m_hIcon    =  AfxGetApp()->LoadIcon(IDI_ICON1);  
       m_pMainWnd->SetWindowText("标准程序");  
}  
else  
{  
       m_hIcon    =  AfxGetApp()->LoadIcon(IDI_ICON2);  
       m_pMainWnd->SetWindowText("演示程序");  
}  
m_pMainWnd->ShowWindow(SW_SHOW);  
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);  
m_pMainWnd->SetIcon(m_hIcon,FALSE);  
m_pMainWnd->UpdateWindow();  
不行,只能改变应用程序标题图标和应用程序最小化时程序标题名称左边的显示图标。
把图标资源放在动态链接库里,控制调用不同的链接库就可以了,用::loadliberary()
一楼的方法很好,
看看这个参考:
http://www.vckbase.com/document/viewdoc/?id=685
一楼的可行。。。不过没具体试验过
一楼的方法可以,我试着做一下,可是具体?
我是指编译后生成的可执行文件的图标,我每次想改变可知行文件的图标都要先编辑IDR_MAINFRAME后编译才能改变可知行文件的图标。我想在编译的时候根据给定的参数自动编辑IDR_MAINFRAME使得生成的可知行文件的图标对应改变。
一楼的方法不好实现。请高手帮忙。。。急呀!!!
EXE文件的图标默认使用资源中的ID最小的那个图标,SO,可以通过修改RC来实现
因为你说通过一个参数来实现不同的版本,所以能不能通过改参数来进行有选择的编译呢?
#ifndef ****
IDR_MAINFRAME ICON.....
#else
...........
#endif
不知在资源文件中支不支持#ifndef,我测试一下
HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T("NotePad.exe"),0);
if (hIcon &&hIcon!=(HICON)-1)
{
    pDC->DrawIcon(10,10,hIcon);
}
DestroyIcon(hIcon);

或者
SHFILEINFO info;
CString strFileName = "C:\\Winnt\\Notepad.exe";
SHGetFileInfo(strFileName,&info,sizeof(&info),SHGFI_DISPLAYNAME | SHGFI_ICON);
int i = m_ImageList.Add(info.hIcon);
m_list.InsertItem(0,info.szDisplayName,i);//把图标插入到ListCtrl中
kvls(冰茶)的方法可以实现。
要在project/settings.../c/c++项目下 preprocessor definitions下定义一个常量:如
 ,DEMO

还要在project/settings.../resourcesz项目下preprocessor definitions对应定义常量
如,DEMO.

再在程序和资源文件中判断:
#ifndef DEMO
IDR_MAINFRAME ICON.....
#else
...........
#endif
bohut(伯虎) 方法好像比较复杂
感谢各位的热情参与。
程序代码