Win32 ASM 简单对话框编程Demo
一. ?ASM基本對話框
?
asm文件;
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; by bobo ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.386.model flat, stdcalloption casemap :none ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Equ 等值定義 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ICO_MAIN equ 1000h ;圖標 DLG_MAIN equ 1 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.data? hInstance dd ? ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.code ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParammov eax,wMsg.if eax == WM_CLOSEinvoke EndDialog,hWnd,NULL.elseif eax == WM_INITDIALOGinvoke LoadIcon,hInstance,ICO_MAINinvoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax.elseif eax == WM_COMMANDmov eax,wParam.if ax == IDOKinvoke EndDialog,hWnd,NULL.endif.elsemov eax,FALSEret.endifmov eax,TRUEret_ProcDlgMain endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start:invoke GetModuleHandle,NULLmov hInstance,eaxinvoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULLinvoke ExitProcess,NULL ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>end start資源文件;
#include <resource.h>#define ICO_MAIN 0x1000 //圖標 #define DLG_MAIN 1ICO_MAIN ICON "Main.ico"DLG_MAIN DIALOG 350, 250, 120, 64 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "對話框demo模板" FONT 9, "宋體" {ICON ICO_MAIN, -1, 10, 11, 18, 21CTEXT "簡單的對話框例子\n by bobo", -1, 36, 14, 70, 19DEFPUSHBUTTON "退出", IDOK, 58, 46, 50, 14CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 39, 103, 1 }資源文件里,
#include?? ??? ?<resource.h>
一句,不能刪除;否則將出現RC2014錯誤;
此處resource.h是Masm32的系統文件;位于:
控制臺構建的文本如下;
Microsoft Windows [版本 10.0.17763.557]
(c) 2018 Microsoft Corporation。保留所有權利。
G:\win32ASM\小例子\Dialog1>set include=g:\masm32\include
G:\win32ASM\小例子\Dialog1>set lib=g:\masm32\lib
G:\win32ASM\小例子\Dialog1>set path=g:\masm32\bin;%path%
G:\win32ASM\小例子\Dialog1>ml /c /coff Dialog.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. ?All rights reserved.
?Assembling: Dialog.asm
***********
ASCII build
***********
G:\win32ASM\小例子\Dialog1>rc Dialog.rc
Dialog.rc (7): error RC2104 : undefined keyword or key name: DS_MODALFRAME
G:\win32ASM\小例子\Dialog1>rc Dialog.rc
G:\win32ASM\小例子\Dialog1>Link /subsystem:windows Dialog.obj Dialog.RES
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
G:\win32ASM\小例子\Dialog1>
?
先調用Windows API的GetModuleHandle獲取程序實例句柄;調用結果在eax;然后mov到hInstance里面;
調用DialogBoxParam創建對話框;
在對話框窗口過程處理三個消息;WM_CLOSE,WM_INITDIALOG,WM_COMMAND;
在WM_INITDIALOG消息設置圖標;
點擊對話框關閉按鈕或者IDOK按鈕,調用EndDialog關閉對話框;
?
二. 增加效果
?
下面來增加效果;載入一小排精英士兵圖標;構建之前文件如下;
此操作不須改動asm文件;改變rc文件,重新執行rc,重新鏈接,即可;如果obj已刪除,則要重新ml;
如果rc出現下圖錯誤;
使用IconWorkshop打開圖標;一個圖標ico文件是可以包含多種格式的;刪除所有格式,只留下32*32-RGB/A即可;
資源文件如下;
#include <resource.h>#define ICO_MAIN 0x1000 //圖標 #define ICO_shibing1 0x8001 #define ICO_shibing2 0x8002 #define ICO_shibing3 0x8003 #define ICO_shibing4 0x8004 #define DLG_MAIN 1ICO_MAIN ICON "Main.ico" ICO_shibing1 ICON "shibing1.ico" ICO_shibing2 ICON "shibing2.ico" ICO_shibing3 ICON "shibing3.ico" ICO_shibing4 ICON "shibing4.ico"DLG_MAIN DIALOG 350, 250, 250, 64 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "對話框demo模板" FONT 9, "宋體" {ICON ICO_MAIN, -1, 10, 11, 20, 21ICON ICO_shibing1, -1,32, 11, 20, 21ICON ICO_shibing2, -1,54, 11, 20, 21ICON ICO_shibing3, -1,76, 11, 20, 21ICON ICO_shibing4, -1,98, 11, 20, 21DEFPUSHBUTTON "退出", IDOK, 58, 46, 50, 14CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 6, 39, 103, 1 }如果資源文件有寫錯;例如?,
ICON ICO_shibing1, -1,32, 11, 20, 21
一句;前面少寫ICON,RC會報錯 invalid control type;
構建完成文件如下;運行效果如下;
總結
以上是生活随笔為你收集整理的Win32 ASM 简单对话框编程Demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 各种Oracle常见操作
- 下一篇: Win32 ASM 菜单编程Demo以及