首页
社区
课程
招聘
[求助]如何在Win32程序里面加图标资源
发表于: 2009-2-25 21:26 8265

[求助]如何在Win32程序里面加图标资源

2009-2-25 21:26
8265

我是照着罗云彬的书做的。但怎么都做不出那个图标来。我用的是RadASM编译器,在添加资源里面已经加入了ICON

并且在DLG对话框资源里面也建了一个Static类SS_ICON,但还是显示不出来。
高手帮忙。
还有,希望有经验的Win32编程大侠能写一些有关用RadASM编写资源的教程,像罗云彬写的书,并没有写如何建立资源界面,所以造成许多初学者只能在工具栏上挨个找。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 26
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
会不会是你这个图标的像素问题?
你换个32X32的看看。
2009-2-26 00:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
如果是你选择这个资源编辑工具,直接选择IMAGE这个控件,然后在把属性设置一下,把你选择的ICON文件选入IMAGE选项,。基本这样就OK了。

如果不行的话,初始化资源的时候调用API,LoadIcon和SendDlgItemMessage

这些教程里都有!!
2009-2-26 09:09
0
雪    币: 122
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
初始化资源的时候已经调用了LoadIcon和SendDlgItemMessage,可还是不行。

                .386
                .model        flat,stdcall
                option casemap:none
               
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib

ICON_MAIN        equ                1001
DLG_MAIN         equ                1000
IDC_EXIT         equ                1002

                .data?

hInstance        dd        ?
               
                .const
               
                .code
_ProcDlgMain        proc        uses ebx esi edi hWnd,wMsg,wParam,lParam
       
                mov        eax,wMsg
                .if        eax == WM_CLOSE
                        invoke        EndDialog,hWnd,NULL
                .elseif        eax == WM_INITDIALOG
                        invoke        LoadIcon,hInstance,ICON_MAIN
                        invoke        SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
                .elseif        eax == WM_COMMAND
                        mov        eax,wParam
                        .if        ax == IDC_EXIT
                                invoke        EndDialog,hWnd,NULL
                        .endif
                .else
                        mov        eax,FALSE
                        ret
                       
                .endif
                mov        eax,TRUE
                ret

_ProcDlgMain endp               
               
start:

                invoke        GetModuleHandle,NULL
                mov        hInstance,eax
                invoke        DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
                invoke        ExitProcess,NULL

                end start

dlgDlg.rc:

#define DLG_MAIN 1000
#define IDC_EXIT 1002
#define ICON_MAIN 1001
DLG_MAIN DIALOGEX 6,6,129,70
CAPTION "消息框"
FONT 9,"宋体",400,0,134
STYLE 0x10CF0000
EXSTYLE 0x00000000
BEGIN
  CONTROL "演示对话框",-1,"Static",0x50000000,58,22,56,10,0x00000000
  CONTROL "OK",IDC_EXIT,"Button",0x50010000,62,52,52,14,0x00000000
  CONTROL "",-1,"Static",0x50000010,10,48,102,1,0x00000000
  CONTROL "#1001",ICON_MAIN,"Static",0x50000203,6,6,42,38,0x00000000
END

questionRes.rc:

#define ICON_MAIN                        1001
ICON_MAIN                ICON      DISCARDABLE "Main.ico"

我想是不是因为我那句定义图标的话写错了啊?
  CONTROL "#1001",ICON_MAIN,"Static",0x50000203,6,6,42,38,0x00000000
教程里生成的语句是:
ICON ICO_MAIN, -1, 10, 11, 18, 21
就这句不一样,所以我想是不是我在工具栏选择的控件不对?

下面这个是教程里面的rc文件:
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include                <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define        ICO_MAIN                0x1000        //图标
#define        DLG_MAIN                1
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN        ICON                "Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 50, 50, 113, 64
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "对话框模板"
FONT 9, "宋体"
{
ICON ICO_MAIN, -1, 10, 11, 18, 21
CTEXT "简单的对话框例子\n用Win32ASM编写", -1, 36, 14, 70, 19
DEFPUSHBUTTON "退出(&X)", IDOK, 58, 46, 50, 14
CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 39, 103, 1
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

就这个小图标本人弄了两天了。实在没办法了。请高手帮忙吧。直接把资源当成附件给大家看看吧。我的是用RadASM编译的。
上传的附件:
2009-2-26 18:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
资源文件有问题
#define DLG_MAIN 1000
#define IDC_EXIT 1002
#define IDC_IMG1 1003
ICON_MAIN ICON DISCARDABLE "Main.ico"
DLG_MAIN DIALOGEX 6,6,129,70
CAPTION "消息框"
FONT 9,"宋体",400,0,134
STYLE 0x10CF0000
BEGIN
  CONTROL "演示对话框",-1,"Static",0x50000000,58,22,56,10
  CONTROL "OK",IDC_EXIT,"Button",0x50010000,62,52,52,14
  CONTROL "",-1,"Static",0x50000010,10,48,102,1
  CONTROL "ICON_MAIN",IDC_IMG1,"Static",0x50000203,12,15,27,23
END
这是改后的,你试一下 把ICON控件改成IMAGE就是那个红色的!
然后把图标文件和资源文件放在同一个文件夹!
如果还不行上帝也帮不了你!
2009-2-26 22:11
0
雪    币: 808
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
我也是初学老罗的WIN32ASM。我按照教程的方法是可以加载任何32*32图标的。我对Radasm不熟,刚才试了下不错的,结合教材用它创建资源非常非常不错。
2009-2-26 22:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
将就你的RadAsm改的。
answer
上传的附件:
2009-2-26 22:39
0
雪    币: 122
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
我知道楼上的直接改了代码,但我不能每次用都每次去改代码吧!我的意思是程序自动生成就可以用的,但我为什么就没显示出来。
2009-2-27 22:02
0
游客
登录 | 注册 方可回帖
返回
//