zoukankan      html  css  js  c++  java
  • 汇编语言学习笔记使用菜单资源

    先做菜单的资源文件,代码如下

    代码
    #define IDM_TEST 1
    #define IDM_HELLO 2
    #define IDM_GOODBYE 3
    #define IDM_EXIT 4

    FirstMenu MENU
    {
    POPUP
    "&PopUp"
    {
    MENUITEM
    "&Say Hello",IDM_HELLO
    MENUITEM
    "Say &GoodBye", IDM_GOODBYE
    MENUITEM SEPARATOR
    MENUITEM
    "E&xit",IDM_EXIT
    }
    MENUITEM
    "&Test", IDM_TEST
    }

    保存为rsrc.rc,(注意名字一定要为这个)
    再做汇编程序如下:

    代码
    .386
    .model flat,stdcall
    option casemap:none

    WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib

    .data
    ClassName db
    "SimpleWinClass",0
    AppName db
    "Our First Window",0
    MenuName db
    "FirstMenu",0 ; The name of our menu in the resource file.
    Test_string db
    "You selected Test menu item",0
    Hello_string db
    "Hello, my friend",0
    Goodbye_string db
    "See you again, bye",0

    .data
    ?
    hInstance HINSTANCE
    ?
    CommandLine LPSTR
    ?

    .
    const
    IDM_TEST equ
    1 ; Menu IDs
    IDM_HELLO equ
    2
    IDM_GOODBYE equ
    3
    IDM_EXIT equ
    4

    .code
    start:
    invoke GetModuleHandle, NULL
    mov hInstance,eax
    invoke GetCommandLine
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    invoke ExitProcess,eax

    WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hwnd:HWND
    mov wc.cbSize,SIZEOF WNDCLASSEX
    mov wc.style, CS_HREDRAW or CS_VREDRAW
    mov wc.lpfnWndProc, OFFSET WndProc
    mov wc.cbClsExtra,NULL
    mov wc.cbWndExtra,NULL
    push hInst
    pop wc.hInstance
    mov wc.hbrBackground,COLOR_WINDOW
    +1
    mov wc.lpszMenuName,OFFSET MenuName ; Put our menu name here
    mov wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov wc.hIcon,eax
    mov wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
    WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
    CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
    hInst,NULL
    mov hwnd,eax
    invoke ShowWindow, hwnd,SW_SHOWNORMAL
    invoke UpdateWindow, hwnd
    .WHILE TRUE
    invoke GetMessage, ADDR msg,NULL,
    0,0
    .BREAK .IF (
    !eax)
    invoke DispatchMessage, ADDR msg
    .ENDW
    mov eax,msg.wParam
    ret
    WinMain endp

    WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    .IF uMsg
    ==WM_DESTROY
    invoke PostQuitMessage,NULL
    .ELSEIF uMsg
    ==WM_COMMAND
    mov eax,wParam
    .IF ax
    ==IDM_TEST
    invoke MessageBox,NULL,ADDR Test_string,OFFSET AppName,MB_OK
    .ELSEIF ax
    ==IDM_HELLO
    invoke MessageBox, NULL,ADDR Hello_string, OFFSET AppName,MB_OK
    .ELSEIF ax
    ==IDM_GOODBYE
    invoke MessageBox,NULL,ADDR Goodbye_string, OFFSET AppName, MB_OK
    .ELSE
    invoke DestroyWindow,hWnd
    .ENDIF
    .ELSE
    invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    ret
    .ENDIF
    xor eax,eax
    ret
    WndProc endp
    end start

    1:project->compile resource file编译资源文件
    2:project->assemble asm file  装载汇编程序
    3:project->link obj file  链接程序
    4:project->run program  运行程序

  • 相关阅读:
    图的概述
    "《算法导论》之‘排序’":线性时间排序
    “《算法导论》之‘查找’”:散列表
    如何使用VS2013本地C++单元测试框架
    “《算法导论》之‘查找’”:顺序查找和二分查找
    查找算法概述
    第二部分 位运算符、赋值运算符、三元及一元运算符和语句分类
    LINQ 的查询_联表、分组、排序
    第二部分 关系与比较运算符 、 自增与自减运算符、条件逻辑运算符
    LINQ to Sql系列一 增,删,改
  • 原文地址:https://www.cnblogs.com/liulun/p/1650033.html
Copyright © 2011-2022 走看看