首页
社区
课程
招聘
为什么工具拦按扭图片不会显示(附代码)
发表于: 2005-12-12 17:37 5699

为什么工具拦按扭图片不会显示(附代码)

2005-12-12 17:37
5699
.rc
...
...
#define        BMP_TOOLBAR        0x1100        //工具栏位图
BMP_TOOLBAR        BITMAP        "toolbar.bmp"

        .asm
BMP_TOOLBAR        equ        1100
        .const
...
...

stToolbar        equ        this byte
TBBUTTON        <0,IDM_0,TBSTATE_PRESSED OR TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <1,IDM_1,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <2,IDM_2,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <3,IDM_3,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <4,IDM_4,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <5,IDM_5,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <6,IDM_6,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <7,IDM_7,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
NUM_BUTTONS        EQU        8
        .code
...
...

.elseif        eax ==        WM_CREATE
                mov        eax,hWnd
                mov        hWinMain,eax
                invoke        CreateToolbarEx,hWinMain,\
                WS_VISIBLE or WS_CHILD ,\
                ID_TOOLBAR,8,hInstance,BMP_TOOLBAR,offset stToolbar,\
                NUM_BUTTONS,28,28,16,16,sizeof TBBUTTON
                mov        hWinToolbar,eax
                call        _Resize
运行的时候可以看到八个按扭但是都是没有出现位图中图片.
也就是没有图片的空白按扭.

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 235
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JiP
2
0x1100 != 1100

#define  BMP_TOOLBAR  0x1100
=>
#define  BMP_TOOLBAR  1100

or

BMP_TOOLBAR  equ  1100
=>
BMP_TOOLBAR  equ  1100h
2005-12-13 18:48
0
雪    币: 214
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
改过了还是不行啊.是不是风格缺点什么东西呢.难道还要发什么消息才能显示按扭图片吗?
2005-12-14 10:03
0
雪    币: 214
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
模块 toolbar 的资源
地址       类型           名称           语言            大小    (十进制)      信息
00404110   BITMAP         OX1100         0409 English (  00001828 (6184.)        //工具栏位图
00405938   ICON           1              0409 English (  000002E8 (744.)
00405C20   GROUP_ICON     OX1000         0409 English (  00000014 (20.)          ICON 1

0040103C    .  A3 04304000   mov dword ptr ds:[403004],eax
00401041    .  6A 14         push 14                                  ; /TbbuttonSize = 14 (20.)
00401043    .  6A 10         push 10                                  ; |BitmapHeight = 10 (16.)
00401045    .  6A 10         push 10                                  ; |BitmapWidth = 10 (16.)
00401047    .  6A 1C         push 1C                                  ; |ButtonHeight = 1C (28.)
00401049    .  6A 1C         push 1C                                  ; |ButtonWidth = 1C (28.)
0040104B    .  6A 08         push 8                                   ; |nButtons = 8
0040104D    .  68 67204000   push toolbar.00402067                    ; |pTbbutton = toolbar.00402067
00401052    .  68 00110000   push 1100                                ; |BitmapId = 1100   ;这个就是工栏位图资源ID吧
00401057    .  FF35 00304000 push dword ptr ds:[403000]               ; |hInst = 00400000
0040105D    .  6A 08         push 8                                   ; |nBitmaps = 8
0040105F    .  68 B0040000   push 4B0                                 ; |ToolbarId = 4B0 (1200.)
00401064    .  68 00000050   push 50000000                            ; |Style = WS_CHILD|WS_VISIBLE
00401069    .  FF35 04304000 push dword ptr ds:[403004]               ; |hWnd = NULL
0040106F    .  E8 9E010000   call <jmp.&comctl32.CreateToolbarEx>     ; \CreateToolbarEx

但是运行的时候为什么去是8个空的按扭呢?
2005-12-14 13:35
0
雪    币: 214
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat, stdcall
                option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
include                Comctl32.inc
includelib        Comctl32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN        equ                1000h                ;图标
;********************************************************************
BMP_TOOLBAR                equ        1100h                ;工具栏位图资源ID
;********************************************************************
ID_TOOLBAR                        equ        1200        ;工具栏控件ID
;********************************************************************
IDM_0                equ        2000
IDM_1                equ        2001
IDM_2                equ        2002
IDM_3                equ        2003
IDM_4                equ        2004
IDM_5                equ        2005
IDM_6                equ        2006
IDM_7                equ        2007

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data?
hInstance        dd                ?
hWinMain        dd                ?
hWinToolbar        dd        ?

                .const
szClassName        db        'toolbar',0
szCaptionMain        db        '工具栏实验',0
stToolbar        equ        this byte
TBBUTTON        <0,IDM_0,TBSTATE_PRESSED OR TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <1,IDM_1,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <2,IDM_2,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <3,IDM_3,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <4,IDM_4,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <5,IDM_5,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <6,IDM_6,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
TBBUTTON        <7,IDM_7,TBSTATE_ENABLED,TBSTYLE_CHECK,0,0,-1>
NUM_BUTTONS        EQU        8

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Quit                proc

                invoke        DestroyWindow,hWinMain
                invoke        PostQuitMessage,NULL
                ret

_Quit                endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain        proc        uses ebx edi esi hWnd,uMsg,wParam,lParam

                mov        eax,uMsg

       
        .if                eax ==        WM_CLOSE
                                        call        _Quit
        .elseif        eax ==        WM_SIZE
                                        CALL MOVTOOLBAR

        .elseif        eax ==        WM_CREATE
                                        mov        eax,hWnd
                                        mov        hWinMain,eax
                                        invoke        CreateToolbarEx,hWinMain,\
                                        WS_VISIBLE or WS_CHILD ,\
                                        ID_TOOLBAR,8,hInstance,BMP_TOOLBAR,offset stToolbar,\
                                        NUM_BUTTONS,28,28,16,16,sizeof TBBUTTON
                                        mov        hWinToolbar,eax
MOVTOOLBAR:                        invoke        SendMessage,hWinToolbar,TB_AUTOSIZE,0,0

;********************************************************************
        .else
                                        invoke        DefWindowProc,hWnd,uMsg,wParam,lParam
                                        ret
        .endif
;********************************************************************
                xor        eax,eax
                ret

_ProcWinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain        proc
                local        @stWndClass:WNDCLASSEX
                local        @stMsg:MSG
                invoke        InitCommonControls
                invoke        GetModuleHandle,NULL
                mov                hInstance,eax
;********************************************************************
; 注册窗口类
;********************************************************************
                invoke        RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
                invoke        LoadIcon,hInstance,ICO_MAIN
                mov                @stWndClass.hIcon,eax
                mov                @stWndClass.hIconSm,eax
                invoke        LoadCursor,0,IDC_ARROW
                mov                @stWndClass.hCursor,eax
                push                hInstance
                pop                @stWndClass.hInstance
                mov                @stWndClass.cbSize,sizeof WNDCLASSEX
                mov                @stWndClass.style,CS_HREDRAW or CS_VREDRAW
                mov                @stWndClass.lpfnWndProc,offset _ProcWinMain
                mov                @stWndClass.hbrBackground,COLOR_WINDOW + 1
                mov                @stWndClass.lpszClassName,offset szClassName
                invoke        RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
                invoke        CreateWindowEx,WS_EX_CLIENTEDGE,\
                                        offset szClassName,offset szCaptionMain,\
                                        WS_OVERLAPPEDWINDOW,\
                                        100,100,690,465,\
                                        NULL,NULL,hInstance,NULL
                mov                hWinMain,eax
                invoke        ShowWindow,hWinMain,SW_SHOWNORMAL
                invoke        UpdateWindow,hWinMain
;********************************************************************
; 消息循环
;********************************************************************
                .while        TRUE
                                        invoke        GetMessage,addr @stMsg,NULL,0,0
                                        .break        .if eax        == 0
                                        invoke        TranslateMessage,addr @stMsg
                                        invoke        DispatchMessage,addr @stMsg
                .endw
                ret

_WinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                call        _WinMain
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include                <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define        ICO_1                        ox1000        //图标
#define        BMP_TOOLBAR                        ox1100        //工具栏位图
//******************************************************************
BMP_TOOLBAR        BITMAP        "toolbar.bmp"
ICO_1        ICON        "toolbar.ico"

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2005-12-14 13:40
0
雪    币: 235
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JiP
6
?????? 0o0o0o0o0o0o0o0o0 ?????

ox1000 != 0x1000

#define  ICO_1      ox1000
=>
#define  ICO_1      0x1000

#define  BMP_TOOLBAR      ox1100
=>
#define  BMP_TOOLBAR      0x1100
2005-12-14 14:00
0
雪    币: 214
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这两个等值定义我改来改去改了n遍了.改成你说的这个样子程序运行就产生错误了:
错误应用程序 toolbar.exe,版本 0.0.0.0,错误模块 comctl32.dll,版本 5.82.2800.1106,错误地址 0x0000bd84。
如果改成ox话,是运行起来了.但是8个空按扭.但ox显然是错的.


开始编程的人都是被晕死的居多.
2005-12-14 15:00
0
雪    币: 235
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JiP
8
工具栏位图(toolbar.bmp)是不是256色位图(256 color Bitmap)?
2005-12-14 20:36
0
雪    币: 214
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢JiP.我把位图格式转换成256色的.可以显示出来了.
2005-12-15 01:17
0
游客
登录 | 注册 方可回帖
返回
//