首页
社区
课程
招聘
[旧帖] [求助] 第二次运行没有菜单 0.00雪花
发表于: 2010-11-9 10:48 1136

[旧帖] [求助] 第二次运行没有菜单 0.00雪花

2010-11-9 10:48
1136

汇编源文件
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include                <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define        ICO_MAIN                0x1000        //图标
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define        IDM_MAIN                0x2000        //菜单
#define        IDA_MAIN                0x2000        //加速键
#define        IDM_OPEN                0x4101
#define        IDM_OPTION                0x4102
#define        IDM_EXIT                0x4103   
#define        IDM_SETFONT                0x4201
#define        IDM_SETCOLOR        0x4202
#define        IDM_INACT                0x4203
#define        IDM_GRAY                0x4204
#define        IDM_BIG                        0x4205
#define        IDM_SMALL                0x4206
#define        IDM_LIST                0x4207
#define        IDM_DETAIL                0x4208
#define        IDM_TOOLBAR                0x4209
#define        IDM_TOOLBARTEXT        0x4210
#define        IDM_INPUTBAR        0x4211
#define        IDM_STATUSBAR        0x4212
#define        IDM_HELP                0x4301
#define        IDM_ABOUT                0x4302
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN        ICON                "Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDM_MAIN        menu        discardable
BEGIN
        popup        "文件(&F)"
        BEGIN
                menuitem        "打开文件(&O)...",        IDM_OPEN
                menuitem        "关闭文件(&C)...",        IDM_OPTION
                menuitem        separator
                menuitem        "退出(&X)",                IDM_EXIT
        END
        popup        "查看(&V)"
        BEGIN
                menuitem        "字体(&F)...\tAlt+F",IDM_SETFONT
                menuitem        "背景色(&B)...\tCtrl+Alt+B",IDM_SETCOLOR
                menuitem        separator
                menuitem        "被禁用的菜单项",        IDM_INACT,        INACTIVE
                menuitem        "被灰化的菜单项",        IDM_GRAY,        GRAYED
                menuitem        separator
                menuitem        "大图标(&G)",                IDM_BIG
                menuitem        "小图标(&M)",                IDM_SMALL
                menuitem        "列表(&L)",                        IDM_LIST
                menuitem        "详细资料(&D)",                IDM_DETAIL
                menuitem        separator
                popup                "工具栏(&T)"
                BEGIN
                   menuitem        "标准按钮(&S)",                IDM_TOOLBAR
                   menuitem        "文字标签(&C)",                IDM_TOOLBARTEXT
                   menuitem        "命令栏(&I)",                IDM_INPUTBAR
                END
                menuitem        "状态栏(&U)",                IDM_STATUSBAR
        END
        popup        "帮助(&H)"        ,HELP
        BEGIN
                menuitem        "帮助主题(&H)\tF1",        IDM_HELP
                menuitem        separator
                menuitem        "关于本程序(&A)...",IDM_ABOUT
        END
END
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDA_MAIN        accelerators
BEGIN
                VK_F1,        IDM_HELP,        VIRTKEY
                "B",        IDM_SETCOLOR,VIRTKEY,CONTROL,ALT
                "F",        IDM_SETFONT,VIRTKEY,ALT
END
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

好烦燥的, 没有这个就没办法实习了

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第二次没有?
2010-11-9 10:59
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个汇编部分我还真是不明白
2010-11-9 12:30
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你把资源代码贴出来了,把汇编代码也贴出来瞧瞧呗
2010-11-9 12:39
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
补上汇编源文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 3rd Edition>
; by 罗云彬, http://www.win32asm.com.cn
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Menu.asm
; 菜单资源的使用例子
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Menu.asm
; rc Menu.rc
; Link /subsystem:windows Menu.obj Menu.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat, stdcall
                option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN        equ                1000h        ;图标
IDM_MAIN        equ                2000h        ;菜单
IDA_MAIN        equ                2000h        ;加速键
IDM_OPEN        equ                4101h
IDM_OPTION        equ                4102h
IDM_EXIT        equ                4103h
IDM_SETFONT        equ                4201h
IDM_SETCOLOR        equ                4202h
IDM_INACT        equ                4203h
IDM_GRAY        equ                4204h
IDM_BIG                equ                4205h
IDM_SMALL        equ                4206h
IDM_LIST        equ                4207h
IDM_DETAIL        equ                4208h
IDM_TOOLBAR        equ                4209h
IDM_TOOLBARTEXT        equ                4210h
IDM_INPUTBAR        equ                4211h
IDM_STATUSBAR        equ                4212h
IDM_HELP        equ                4301h
IDM_ABOUT        equ                4302h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data?
hInstance        dd                ?
hWinMain        dd                ?
hMenu                dd                ?
hSubMenu        dd                ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .const
szClassName        db        'Menu Example',0
szCaptionMain        db        'Menu',0
szMenuHelp        db        '帮助主题(&H)',0
szMenuAbout        db        '关于本程序(&A)...',0
szCaption        db        '菜单选择',0
szFormat        db        '您选择了菜单命令:%08x',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_DisplayMenuItem        proc        _dwCommandID
                        local        @szBuffer[256]:byte

                pushad
                invoke        wsprintf,addr @szBuffer,addr szFormat,_dwCommandID
                invoke        MessageBox,hWinMain,addr @szBuffer,offset szCaption,MB_OK
                popad
                ret

_DisplayMenuItem        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Quit                proc

                invoke        DestroyWindow,hWinMain
                invoke        PostQuitMessage,NULL
                ret

_Quit                endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain        proc        uses ebx edi esi hWnd,uMsg,wParam,lParam
                local        @stPos:POINT
                local        @hSysMenu

                mov        eax,uMsg
                .if        eax ==        WM_CREATE
                        invoke        GetSubMenu,hMenu,1
                        mov        hSubMenu,eax
;********************************************************************
;        在系统菜单中添加菜单项
;********************************************************************
                        invoke        GetSystemMenu,hWnd,FALSE
                        mov        @hSysMenu,eax
                        invoke        AppendMenu,@hSysMenu,MF_SEPARATOR,0,NULL
                        invoke        AppendMenu,@hSysMenu,0,IDM_HELP,offset szMenuHelp
                        invoke        AppendMenu,@hSysMenu,0,IDM_ABOUT,offset szMenuAbout
;********************************************************************
; 处理菜单及加速键消息
;********************************************************************
                .elseif        eax ==        WM_COMMAND
                        invoke        _DisplayMenuItem,wParam
                        mov        eax,wParam
                        movzx        eax,ax
                        .if        eax ==        IDM_EXIT
                                call        _Quit
                        .elseif        eax >=        IDM_TOOLBAR && eax <= IDM_STATUSBAR
                                mov        ebx,eax
                                invoke        GetMenuState,hMenu,ebx,MF_BYCOMMAND
                                .if        eax ==        MF_CHECKED
                                        mov        eax,MF_UNCHECKED
                                .else
                                        mov        eax,MF_CHECKED
                                .endif
                                invoke        CheckMenuItem,hMenu,ebx,eax
                        .elseif        eax >=        IDM_BIG && eax <= IDM_DETAIL
                                invoke        CheckMenuRadioItem,hMenu,IDM_BIG,IDM_DETAIL,eax,MF_BYCOMMAND
                        .endif
;********************************************************************
; 处理系统菜单消息
;********************************************************************
                .elseif        eax == WM_SYSCOMMAND
                        mov        eax,wParam
                        movzx        eax,ax
                        .if        eax == IDM_HELP || eax == IDM_ABOUT
                                invoke        _DisplayMenuItem,wParam
                        .else
                                invoke        DefWindowProc,hWnd,uMsg,wParam,lParam
                                ret
                        .endif
;********************************************************************
; 按下右键时弹出一个POPUP菜单
;********************************************************************
                .elseif eax == WM_RBUTTONDOWN
                        invoke        GetCursorPos,addr @stPos
                        invoke        TrackPopupMenu,hSubMenu,TPM_LEFTALIGN,@stPos.x,@stPos.y,NULL,hWnd,NULL
;********************************************************************
                .elseif        eax ==        WM_CLOSE
                        call        _Quit
;********************************************************************
                .else
                        invoke        DefWindowProc,hWnd,uMsg,wParam,lParam
                        ret
                .endif
;********************************************************************
                xor        eax,eax
                ret

_ProcWinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain        proc
                local        @stWndClass:WNDCLASSEX
                local        @stMsg:MSG
                local        @hAccelerator

                invoke        GetModuleHandle,NULL
                mov        hInstance,eax
                invoke        LoadMenu,hInstance,IDM_MAIN
                mov        hMenu,eax
                invoke        LoadAccelerators,hInstance,IDA_MAIN
                mov        @hAccelerator,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,400,300,\
                        NULL,hMenu,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        TranslateAccelerator,hWinMain,@hAccelerator,addr @stMsg
                        .if        eax == 0
                                invoke        TranslateMessage,addr @stMsg
                                invoke        DispatchMessage,addr @stMsg
                        .endif
                .endw
                ret

_WinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                call        _WinMain
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start
2010-11-9 13:01
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个是资源文件, C语言格式。  因为winwods资源编辑器是C++ 里的
2010-11-9 13:03
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我在RadASM编译你的代码没问题,多少次菜单都在
上传的附件:
2010-11-9 13:41
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
编译器问题?
2010-11-9 13:56
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
直接读第六章。定时器 和 windows时间。真是灵异了
2010-11-9 16:12
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不怎么懂.........
2010-11-9 20:25
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=cnfixit;886566]我在RadASM编译你的代码没问题,多少次菜单都在
[/QUOTE]

要点击构建并运行。如果只运行的话结果总是第一次编译的结果。
那位能留下QQ 和我聊聊
2010-11-10 08:58
0
游客
登录 | 注册 方可回帖
返回
//