鱼C论坛

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

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

[复制链接]
发表于 2013-1-8 17:40:24 | 显示全部楼层 |阅读模式
1鱼币
WIN32第四章的第一程序窗口代码,我照着敲出来,但编译不能过。
我一行一行的对照,发了几处打错了,又对照了两遍,确认没了,便编译还是不通过。
  1.    .386 ;CPU支持的指令集
  2.    .model flat,stdcall  ;定义内存寻址模式及子程序的调用方式
  3.    option casemap:none  ;选项,设置变量是否区分大小写,支持
  4.    
  5. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  6. ;Include 文件定义
  7. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  8. include  windows.inc  ;包含系统类库
  9. include  gdi32.inc  ;图形相关函数库
  10. includelib gdi32.lib  ;图形函数导入库
  11. include  user32.inc  ;用户函数函数库
  12. includelib user32.lib  ;用户导入库
  13. include  kernel32.inc ;核心库
  14. includelib kernel32.lib ;核心类库
  15. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  16. ;数据段
  17. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  18.    .data?     ;定义数据段
  19. hInstance dd  ?  ;
  20. hWinMain dd  ?  ;   .const     ;定义常量数据段
  21.    
  22. SzClassName  dd  'MyClass',0
  23. SzCaptionMain dd  'My first Window!',0
  24. SzText   dd  'Win32 Assembly,Simple and powerful !',0
  25. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  26. ;代码段
  27. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  28.     .code
  29. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  30. ;窗口过程
  31. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  32. _ProcWinMain proc USES ebx edi esi,hWnd,uMsg,wParam,lParam  ;uses这关键字的作用是,无论哪个函数的返回值都永远都是放在eax中的。
  33.     local @stPs:PAINTSTRUCT
  34.     local @stRect:RECT
  35.     local @hDc
  36.    
  37.     mov eax,uMsg
  38. ;**********************************************************************
  39.     .if  eax == WM_PAINT
  40.       invoke BeginPaint,hWnd,addr @stPs
  41.       mov  @hDc,eax
  42.       
  43.       invoke GetClientRect,hWnd,addr @stRect
  44.       invoke DrawText,@hDc,addr szText,-1,\
  45.         addr @stRect,\
  46.         DT_SINGLELINE or DT_CENTER or DT_VCENTER
  47.         
  48.       invoke EndPaint,hWnd,addr @stPs
  49. ;**********************************************************************
  50.     .elseif eax == WM_CLOSE
  51.       invoke DestroyWindow,hWinMain
  52.       invoke PostQuitMessage,NULL
  53. ;**********************************************************************
  54.     .else
  55.       invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  56.       ret
  57.     .endif
  58. ;**********************************************************************
  59.     xor  eax,eax
  60.     ret
  61.    
  62. _ProcWinMain endp
  63. ;**********************************************************************
  64. _WinMain  proc
  65.     local @stWndClass:WNDCLASSEX  ;冒号的含义是什么?
  66.     local @stMsg:MSG
  67.    
  68.     invoke GetModuleHandle,NULL
  69.     mov  hInstance,eax
  70.     invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
  71. ;**********************************************************************
  72. ;注册窗口类
  73. ;**********************************************************************
  74.     invoke  LoadCursor,0,IDC_ARROW
  75.     mov  @stWndClass.hCursor,eax
  76.     push  hInstance
  77.     pop  @stWndClass.hInstance
  78.     mov  @stWndClass.cbSize,sizeof WNDCLASSEX
  79.     mov  @stWndClass.style,CS_HREDRAW OR CS_VREDRAW
  80.     mov  @stWndClass.lpfnWndProc,offset _ProcWinMain
  81.     mov  @stWndClass.hbrBackground,COLOR_WINDOW + 1
  82.     mov  @stWndClass.lpszClassName,offset szClassName
  83.     invoke RegisterClassEx,add @stWndClass
  84. ;**********************************************************************
  85. ;建立并显示窗口
  86. ;**********************************************************************
  87.     invoke CreatewindowEx,WS_EX_CLIENTEDGE,\
  88.       offset szClassName,offset szCaptionMain,\
  89.       WS_OVERLAPPEDWINDOW,\
  90.       100,100,600,400,\
  91.       NULL,NULL,hInstance,NULL
  92.     mov  hWinMain,eax
  93.     invoke ShowWindow,hWinMain,SW_SHOWNORMAL
  94.     invoke updateWindow,hWinMain
  95. ;**********************************************************************
  96. ;消息循环
  97. ;**********************************************************************
  98.     .while TRUE
  99.       invoke GetMessage,addr @stMsg,NULL,0,0
  100.       .break .if eax == 0
  101.       invoke TranslateMessage,addr @stMsg
  102.       invoke DispatchMessage,addr @stMsg
  103.       .endw
  104.       ret
  105. _WinMain    endp
  106. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  107. start:
  108.     call _WinMain
  109.     invoke ExitProcess,NULL
  110. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  111.     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定义
小甲鱼最新课程 -> https://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定义
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

刚开始学,看这么多代都头大,照办下来,没想检查几遍也没检查出来,天资太差了点。谢谢指点!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 15:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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