鱼C论坛

 找回密码
 立即注册
查看: 1597|回复: 2

程序无法显示图标,求助!

[复制链接]
发表于 2014-8-31 11:57:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 H云淡风清 于 2014-8-31 12:10 编辑

win32汇编写的一个程序,在程序里注册窗口类时设置了图标,在外面文件的图标可以显示,但是程序左上角无法显示图标,求大神看看啥问题。


  1. .386
  2. .model flat,stdcall
  3. option casemap:none

  4. include                windows.inc
  5. include                user32.inc
  6. includelib            user32.lib
  7. include                kernel32.inc
  8. includelib            kernel32.lib

  9. IDR_MAIN            equ        1000h        ;菜单
  10. ICO_MAIN            equ        2000h        ;图标
  11. IDM_XINJIAN       equ        3000h        ;菜单项“新建”
  12. IDM_DAKAI          equ        3001h        ;菜单项“打开”
  13. IDM_GUANBI       equ        3002h        ;菜单项“关闭”
  14. IDM_BAOCUN      equ        3003h        ;菜单项“保存”
  15. IDM_TUICHU        equ        3004h        ;菜单项“退出”
  16. IDM_GUANYU      equ        3005h        ;菜单项“关于”

  17. .data?
  18.         hInstance        dd        ?
  19.         hWinMain       dd        ?
  20.         hEmnu            dd        ?                ;菜单句柄
  21.         hSubEmnu      dd        ?                ;右键菜单句柄
  22.         szHC               db        32 dup(?)   ;缓冲区
  23.         
  24. .const
  25.         szCaption            db        'Message',0
  26.         szWndClass         db        'MyClass',0
  27.         szText                  db        '暂不支持 “%s”呢',0
  28.         szText1                db        '新建',0
  29.         szText2                db        '打开',0
  30.         szText3                db        '关闭',0
  31.         szText4                db        '保存',0
  32.         szText5                db        '这个可以有',0
  33.         szHelpText          db        'BY: H.Z.J    E-mail: hInstance@126.com ',0
  34.         
  35. .code
  36.         
  37.         _procWinMain        proc uses ebx esi edi,hWnd,uMsg,wParam,lParam                ;窗口过程
  38.                
  39.                 local @stPos : POINT
  40.                
  41.                 mov eax,uMsg
  42.                
  43.                 .if eax == WM_CLOSE
  44.                         invoke DestroyWindow,hWinMain
  45.                         invoke PostQuitMessage,NULL
  46.                 .elseif eax == WM_CREATE
  47.                         invoke GetSubMenu,hEmnu,0
  48.                         mov hSubEmnu,eax
  49.                 .elseif eax == WM_COMMAND        ;处理菜单
  50.                                 mov eax,wParam
  51.                                 movzx eax,ax
  52.                                 push eax
  53.                                 .if eax >= IDM_XINJIAN && eax <= IDM_BAOCUN        ;菜单项被选择时添加标记
  54.                                                 mov ebx,eax
  55.                                                 invoke GetMenuState,hEmnu,ebx,MF_BYCOMMAND
  56.                                                 .if eax == MF_CHECKED
  57.                                                         mov eax,MF_UNCHECKED
  58.                                                 .else
  59.                                                         mov eax,MF_CHECKED
  60.                                                 .endif
  61.                                                 invoke CheckMenuItem,hEmnu,ebx,eax
  62.                                 .endif
  63.                                 pop eax
  64.                                 ;处理各个菜单项
  65.                                 .if eax == IDM_XINJIAN               
  66.                                         invoke wsprintf,addr szHC,addr szText,addr szText1
  67.                                         invoke MessageBox,NULL,offset szHC,offset szCaption,MB_OK
  68.                                 .elseif eax == IDM_DAKAI
  69.                                         invoke wsprintf,addr szHC,addr szText,addr szText2
  70.                                         invoke MessageBox,NULL,offset szHC,offset szCaption,MB_OK
  71.                                 .elseif eax == IDM_GUANBI
  72.                                         invoke wsprintf,addr szHC,addr szText,addr szText3
  73.                                         invoke MessageBox,NULL,offset szHC,offset szCaption,MB_OK
  74.                                 .elseif eax == IDM_BAOCUN
  75.                                         invoke wsprintf,addr szHC,addr szText,addr szText4
  76.                                         invoke MessageBox,NULL,offset szHC,offset szCaption,MB_OK
  77.                                 .elseif eax == IDM_TUICHU
  78.                                         invoke MessageBox,NULL,offset szText5,offset szCaption,MB_OK
  79.                                         invoke DestroyWindow,hWinMain
  80.                                         invoke PostQuitMessage,NULL
  81.                                 .elseif eax == IDM_GUANYU
  82.                                         invoke MessageBox,NULL,offset szHelpText,offset szCaption,MB_OK
  83.                                 .endif
  84.                                 
  85.                 .elseif eax == WM_RBUTTONDOWN        ;右键弹出菜单
  86.                         invoke GetCursorPos,addr @stPos
  87.                         invoke TrackPopupMenu,hSubEmnu,TPM_LEFTALIGN,@stPos.x,@stPos.y,NULL,hWnd,NULL
  88.                 .else
  89.                         invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  90.                         ret
  91.                 .endif
  92.                
  93.                 xor eax,eax
  94.                 ret
  95.                         
  96.         _procWinMain        endp
  97.         
  98.         _WinMain        proc
  99.                
  100.                 local @stClass        :        WNDCLASSEX
  101.                 local @stuMsg        :        MSG
  102.                
  103.                 ;获取窗口句柄
  104.                 invoke GetModuleHandle,NULL
  105.                 mov hInstance,eax
  106.                
  107.                 ;获取菜单句柄
  108.                 invoke LoadMenu,hInstance,IDR_MAIN
  109.                 mov hEmnu,eax
  110.                
  111.                 invoke RtlZeroMemory,addr @stClass,sizeof @stClass
  112.                
  113.                 ;注册窗口类
  114.                 invoke LoadCursor,0,IDC_ARROW
  115.                 mov @stClass.hCursor,eax
  116.                 invoke LoadIcon,0,ICO_MAIN
  117.                 mov @stClass.hIcon,eax
  118.                 mov @stClass.hIconSm,eax
  119.                 push hInstance
  120.                 pop @stClass.hInstance
  121.                 mov @stClass.cbSize,sizeof WNDCLASSEX
  122.                 mov @stClass.style,CS_VREDRAW or CS_HREDRAW
  123.                 mov @stClass.lpfnWndProc,offset _procWinMain
  124.                 mov @stClass.hbrBackground,COLOR_WINDOW + 1
  125.                 mov @stClass.lpszClassName,offset szWndClass
  126.                 invoke RegisterClassEx,addr @stClass
  127.                
  128.                 ;建立窗口
  129.                 invoke CreateWindowEx,WS_EX_OVERLAPPEDWINDOW,offset szWndClass,offset szCaption,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,600,400,NULL,hEmnu,hInstance,NULL
  130.                 mov hWinMain,eax
  131.                
  132.                 ;显示窗口
  133.                 invoke ShowWindow,hWinMain,SW_SHOWNORMAL
  134.                 invoke UpdateWindow,hWinMain
  135.                
  136.                 ;消息循环
  137.                 .while TRUE
  138.                
  139.                         invoke GetMessage,addr @stuMsg,NULL,NULL,0
  140.                         .break .if eax == 0
  141.                         invoke TranslateMessage,addr @stuMsg
  142.                         invoke DispatchMessage,addr @stuMsg
  143.                
  144.                 .endw
  145.                
  146.                 ret
  147.                
  148.         _WinMain        endp
  149.         
  150. start:

  151.         call _WinMain
  152.         invoke ExitProcess,NULL

  153. end start
复制代码

程序.rar

163.53 KB, 下载次数: 2

程序

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-31 12:21:25 | 显示全部楼层
强烈支持楼主ing……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-31 17:27:44 | 显示全部楼层
第 119 行“invoke LoadIcon,0,ICO_MAIN”,应该改成“invoke LoadIcon,hInstance,ICO_MAIN”

评分

参与人数 2荣誉 +5 鱼币 +8 贡献 +5 收起 理由
H云淡风清 + 3 热爱鱼C^_^
小靚同学Leon + 5 + 5 + 5 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表