如何动态改变窗口图标
编号:QA000352
建立日期: 1999年1月16日 最后修改日期:2002年3月3日
所属类别:
朱毅华:
操作系统:win 3.2
使用的编程工具:VC1.5
最近在了解WIN API时遇到如下问题:我想动态改变窗口图标,但VC1.5未提供SetIcon函数,书上说用::SetClassLong()函数直接修改已注册的WNDCLASS类,第一参数用m_hWnd,第二参数用GCW_HICON(VC5中变成GCL_HICON),我不知第三参数如何用,因为是long型,我用LoadIcon()返回的是HICON型,编译时说类型不对.因此想问这个long型数据存放了什么?SetClassLong和GetClassLong的主要作用是什么?
回答:
我想你大概是捧着VC++ 5.0的书来学习VC++ 1.5的编程,其实Windows 3.x的API和Win32 API还是有不少差别的。每个窗口都隶属一个Class,这个Class有一些基本属性,如图标、鼠标箭头等等。在Windows 3.x下使用SetClassWord、SetClassLong进行修改,而在Win32中采用SetClassLong进行修改,SetClassWord基本不用了。所以书上的说法肯定是针对Win32的。在Windows 3.x下应该使用如下代码(C语言):
SetClassWord(hwndDlg, GCW_HICON,
LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1)));
在Win32 API中使用如下代码(C语言):
SetClassLong(hwndDlg, GCL_HICON,
(LONG) LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON1)));
HICON在Windows 3.x下为16位,在Win32中位32位。
铁峰的意见:
在窗体OnCreate的时候:
(1)使用MFC类库中的函数更改图标
// Tief: Modify the class to change Icon
// Start
HICON hIconNew = AfxGetApp()->LoadIcon(IDR_MYAPP) ;
SetIcon(hIconNew,FALSE) ;
(2)使用Windows API更改图标
// Tief: Modify the class to change Icon
// Start
HICON hIconNew = AfxGetApp()->LoadIcon(IDR_MYAPP) ;
SetClassLong(m_hWnd,GCL_HICON,(long)hIconNew) ;
此问题由李海回答。
| |
|
|
| |
|
|