热情软件屋

 

如何动态改变窗口图标


编号: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) ;

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio