鱼C论坛

 找回密码
 立即注册
查看: 2374|回复: 3

一个win32汇编窗口显示不出来问题

[复制链接]
发表于 2012-5-19 18:37:50 | 显示全部楼层 |阅读模式
3鱼币
这是一个只要学习win32汇编开头的都能回答,这个问题应该很简单:就是能编译,能连接,但是不能显示窗口,希望各位大哥大姐帮帮忙,希望能给我说哪里错了,详细点,我很笨的

1.rar

1.96 KB, 下载次数: 3

最佳答案

查看完整内容

参数错误,消息循环应该有问题,最后的exitprocess函数 没机会执行到,建议你修改代码格式,看着不舒服,我下面有个模板 你自己对照一下 .586 .model flat,stdcall option casemap:none include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD .data ClassName db 'MainWinClass',0 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-19 18:37:51 | 显示全部楼层
参数错误,消息循环应该有问题,最后的exitprocess函数 没机会执行到,建议你修改代码格式,看着不舒服,我下面有个模板 你自己对照一下
.586
.model flat,stdcall
option casemap:none

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


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


.data
   ClassName db 'MainWinClass',0
   AppName  db "Main Window",0
   szTest  db "abc",0
   
.data?
   hInstance HINSTANCE ?
   CommandLine LPSTR ?

.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  hInstance
        pop   wc.hInstance
        mov   wc.hbrBackground,COLOR_BTNFACE+1
        mov   wc.lpszMenuName,NULL
        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
                invoke MessageBox,hwnd,addr szTest,addr szTest,MB_OK
                .BREAK .IF (!eax)
               
                invoke TranslateMessage, ADDR msg
                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_CREATE
                ;
        .ELSE
                invoke DefWindowProc,hWnd,uMsg,wParam,lParam               
                ret
        .ENDIF
       
        xor eax,eax
        ret
WndProc endp


end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-19 20:41:40 | 显示全部楼层
CreateWindowEx中的第二个参数错了,改成 szClassName,还是不显示窗口
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-5-19 22:46:56 | 显示全部楼层

谢谢 其实我已经解决了  就是消息循环错了,我有点马虎了,在DefWindowProc这个API下面忘了加ret了。大家以后出现这个问题要看看这里是不是少写一句RET
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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