鱼C论坛

 找回密码
 立即注册
查看: 1727|回复: 1

[技术交流] 【学习笔记】自用模板

[复制链接]
发表于 2012-7-17 18:26:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .386
  .model flat,stdcall
  option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include  windows.inc
include  gdi32.inc
includelib gdi32.lib
include  user32.inc
includelib user32.lib
include  kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; EQU等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000h      ;图标
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .data?
hInstance dd ?
hWinMain dd ?
hMenu  dd ?
hSubMenu dd ?
  .const
szClassName db 'My Class',0     ;窗口类名称
szCaptionMain db 'Win32汇编模板',0     ;主窗口标题
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .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
;********************************************************************
.else
  invoke DefWindowProc,hWnd,uMsg,wParam,lParam  ;将剩下的消息交给WINDOWS处理
  ret       ;直接返回
.endif
;********************************************************************
xor eax,eax       ;将EAX寄存器致零。
ret        ;直接返回
_ProcWinMain endp       ;窗口过程结束
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc       ;主模块执行
local @stWndClass:WNDCLASSEX     ;申请注册窗口类的结构体@stWndClass
local @stMsg:MSG      ;申请消息结构体@stMsg
invoke GetModuleHandle,NULL     ;获取本程序句柄
mov hInstance,eax      ;保存句柄到hInstance变量
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass  ;将结构体@stWndClass全部清0
;********************************************************************
; 注册窗口类
;********************************************************************
invoke LoadIcon,hInstance,ICO_MAIN
mov @stWndClass.hIcon,eax
mov @stWndClass.hIconSm,eax
push hInstance      ;将程序的实例句柄压栈
pop @stWndClass.hInstance     ;将程序的实例句柄出栈存储到结构体中
mov @stWndClass.cbSize,sizeof WNDCLASSEX
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
  ;类的风格 CS_HREDRAW当窗口水平方向的宽度变化时重绘整个窗口
  ;CS_VREDRAW 当窗口垂直方向的宽度变化时重绘整个窗口
mov @stWndClass.lpfnWndProc,offset _ProcWinMain  ;窗口回调过程的地址存储到结构体中
mov @stWndClass.hbrBackground,COLOR_WINDOW + 1  ;画刷:颜色是白色..后面规定要+1
mov @stWndClass.lpszClassName,offset szClassName  ;给定类名称
invoke RegisterClassEx,addr @stWndClass    ;注册窗口类
;********************************************************************
; 建立并显示窗口
;********************************************************************
invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,\
    WS_OVERLAPPEDWINDOW,400,200,400,300,NULL,NULL,hInstance,NULL  
;建立窗口  窗口风格扩展client客户 + edge边缘,后面的是类名称,窗口标题,复合窗口风格
mov hWinMain,eax      ;将返回句柄存储到hWinMain
invoke ShowWindow,hWinMain,SW_SHOWNORMAL    ;显示窗口:SW_SHOWNORMAL普通状态显示
invoke UpdateWindow,hWinMain     ;更新窗口
;********************************************************************
; 消息循环
;********************************************************************
.while TRUE       ;TRUE==1
  invoke GetMessage,addr @stMsg,NULL,0,0   ;取得本程序所有的消息放入@stMsg
  .break .if eax == 0     ;如果EAX返回0(收到退出函数就等于0)则立即中断并退出消息循环
  invoke TranslateMessage,addr @stMsg   ;转译@stMsg里面的消息到窗口过程
  invoke DispatchMessage,addr @stMsg   ;派发@stMsg里面的消息到窗口过程
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
call _WinMain      ;调用子程序_WinMain
invoke ExitProcess,NULL      ;退出程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start        ;程序从start开始执行


=======================================================================

RC文件


#include  <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//宏命令
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define  ICO_MAIN 0x1000   //图标
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON  "Main.ico"

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-17 18:47:47 | 显示全部楼层
占楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-20 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表