回 帖 发 新 帖 刷新版面

主题:请教高手:对话框图标的加载

图标文件使用图标软件制作:16×16+32×32,16色;

在资源文件中定义了图标资源和对话框资源;

;程序主过程:
Start:call GetModuleHandleA,0  ;取得模块句柄,返回结果在eax中
      mov      hInst,eax           ;保存句柄
      ;调用DialogBoxParamA显示对话框
      call DialogBoxParamA,eax,offset DialogName,0,offset DialogProc,0
      ……

;对话框消息处理过程
WmInitDialog:                              ;对话框初始化处理
      call LoadIcon,hInst,offset IconName ;为对话框加载图标
      ……

    感觉应该在对话框初始化消息处理中加载对话框的图标(标题左边的),故照此处理。编译链接生成的执行文件图标是所绘制的32×32图标没错,但运行之后,对话窗的图标却显示为系统默认的! 跟踪初始化过程,LoadIcon函数返回句柄正确。
    应该是上面的处理缺少点什么(VC/C++讨论此问题的帖子很多,在LoadIcon后紧跟着SetIcon,但是SetIcon不是Win32 API函数!Delphi下实现很简单,但没发现参考价值),但实在不知从何下手了。请高手指点一二!谢谢!

回复列表 (共2个回复)

沙发

LoadIcon只返回图标句柄,要设置窗口图标还得调用SendMessage发送WM_SETICON消息,如下:
invoke LoadIcon,NULL,IDI_APPLICATION
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
hWnd  对话框句柄
ICON_BIG  32x32图标
eax  图标句柄

板凳

非常感谢你的提醒!

我是这样才加上:
   call   LoadIcon,hInst,offset IconName   ;IconName是自制图标资源名
   call   SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax
hInst是实例句柄,在主过程取得,参见原始问题

我来回复

您尚未登录,请登录后再回复。点此登录或注册