鱼C论坛

 找回密码
 立即注册
查看: 1721|回复: 2

WIN32第四章的第一程序窗口代码,我照着敲出来,但编译不能过?

[复制链接]
发表于 2013-1-8 17:40:24 | 显示全部楼层 |阅读模式
1鱼币
WIN32第四章的第一程序窗口代码,我照着敲出来,但编译不能过。
我一行一行的对照,发了几处打错了,又对照了两遍,确认没了,便编译还是不通过。
   .386 ;CPU支持的指令集
   .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 ;核心类库
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
   .data?     ;定义数据段
hInstance dd  ?  ;
hWinMain dd  ?  ;   .const     ;定义常量数据段
   
SzClassName  dd  'MyClass',0
SzCaptionMain dd  'My first Window!',0
SzText   dd  'Win32 Assembly,Simple and powerful !',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain proc USES ebx edi esi,hWnd,uMsg,wParam,lParam  ;uses这关键字的作用是,无论哪个函数的返回值都永远都是放在eax中的。
    local @stPs:PAINTSTRUCT
    local @stRect:RECT
    local @hDc
    
    mov eax,uMsg
;**********************************************************************
    .if  eax == WM_PAINT
      invoke BeginPaint,hWnd,addr @stPs
      mov  @hDc,eax
      
      invoke GetClientRect,hWnd,addr @stRect
      invoke DrawText,@hDc,addr szText,-1,\
        addr @stRect,\
        DT_SINGLELINE or DT_CENTER or DT_VCENTER
        
      invoke EndPaint,hWnd,addr @stPs
;**********************************************************************
    .elseif eax == WM_CLOSE
      invoke DestroyWindow,hWinMain
      invoke PostQuitMessage,NULL
;**********************************************************************
    .else
      invoke DefWindowProc,hWnd,uMsg,wParam,lParam
      ret
    .endif
;**********************************************************************
    xor  eax,eax
    ret
    
_ProcWinMain endp
;**********************************************************************
_WinMain  proc
    local @stWndClass:WNDCLASSEX  ;冒号的含义是什么?
    local @stMsg:MSG
    
    invoke GetModuleHandle,NULL
    mov  hInstance,eax
    invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;**********************************************************************
;注册窗口类
;**********************************************************************
    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,add @stWndClass
;**********************************************************************
;建立并显示窗口
;**********************************************************************
    invoke CreatewindowEx,WS_EX_CLIENTEDGE,\
      offset szClassName,offset szCaptionMain,\
      WS_OVERLAPPEDWINDOW,\
      100,100,600,400,\
      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

 
编译结果
QQ截图20130108174039.png

最佳答案

查看完整内容

46: szText用db定义 szText db "Win32 Assembly,Simple and powerful !",0 85: 把83行的add改成addr 89: 是CreateWindowEx 96: 是UpdateWindow 24,25,26: 22 23 24行的代码 都用db定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-1-8 17:40:25 | 显示全部楼层
46:   szText用db定义  szText   db   "Win32 Assembly,Simple and powerful !",0
85:  把83行的add改成addr
89:  是CreateWindowEx
96:    是UpdateWindow
24,25,26:    22 23 24行的代码 都用db定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-9 00:54:52 | 显示全部楼层

刚开始学,看这么多代都头大,照办下来,没想检查几遍也没检查出来,天资太差了点。谢谢指点!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 00:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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