Windows下的窗口程序

再进一步、

.386
.model flat,stdcall
option casemap:none
include        Windows.inc
include        user32.inc
includelib    user32.lib
include        kernel32.inc
includelib    kernel32.lib

WinMain proto :DWORD ,:DWORD,:DWORD,:DWORD    ;WinMain 函数原型定义

.DATA
ClassName    db    "SimpleWinClass",0
AppName        db    "My First Window",0

.DATA?                            ;没有初始化的数据
hInstance    HINSTANCE    ?
CommandLine    LPSTR        ?            ;字符串指针变量

.CODE
start:
;-----------------------------------------------------------------------------------------------------------
;得到应用程序的句柄
invoke    GetModuleHandle,NULL
mov        hInstance,eax

;-----------------------------------------------------------------------------------------------------------
;得到命令行参数
invoke    GetCommandLine
mov        CommandLine,eax

;调用WinMain函数
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_WINDOW+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,CmdShow

;-----------------------------------------------------------------------------------------------------------
;刷新窗口客户区
invoke UpdateWindow,hwnd
;-----------------------------------------------------------------------------------------------------------
;进入获取窗口消息的循环
 .WHILE TRUE
     invoke GetMessage,ADDR msg,NULL,0,0
     .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
.ELSE
    invoke  DefWindowProc,hWnd,uMsg,wParam,lParam
    ret
.endif
xor eax,eax
ret
WndProc endp

end start    
时间: 2024-08-06 06:13:44

Windows下的窗口程序的相关文章

Windows下,通过程序设置全屏抗锯齿(多重采样)的方法

这里说的全屏抗锯齿,不是基于着色器的FXAA之类的方式,而是兼容性更好的,基于固定管线的多重采样方式. 先来说一下开发环境,我用的是VC2013+GLEW1.11. 要通过程序设置多重采样,首先需要进入控制面板,确定抗锯齿的设置是“根据应用程序而定” ,当然,这个设置的具体名称,不同的显卡厂商有不同的叫法. 接下来,就是重点了. Windows下要通过程序设置多重采样,必须使用wglChoosePixelFormatARB这个函数.目前网上基本都是自己去获取这个函数的接口地址,其实根本不用这么麻

windows下python脚本程序的运行

c:\python33\python.exe c:\python33\trycoding.py windows下python脚本程序的运行,布布扣,bubuko.com

gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器. cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从boost库的划分中可以看出来端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets.所以完全可以和linux一起同步更新gcc版本,而不用担心问题,并且在cygwin/gcc做的东西(不用win32的)可以无缝的用在linux下,没有任何问题.是在windows下开发

使用Code::blocks在windows下写网络程序

使用Code::blocks在windows下写网络程序 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 发布 GPLv3 许可证的副本可以在这里获得:http://www.gnu.org/licenses/gpl.html 本文档根据GNU Free Documentation License 1.3发布 GFDL1.3许可证的副本可以在这里获得:ht

在windows下编写R程序包

每个R的使用者总会遇到这样的问题,用R时间长了攒了几个自己写的函数需要经常调用,用source命令调用感觉不够方便,最好怎么办呢?编一个自己的包,只需安装一次就可多次调用,方便自己和他人使用.我把自己制作R包的步骤记了下来,主要参考了统计之都的一篇帖子(http://cos.name/cn/topic/15991)和<Creating R Packages: A Tutorial>中的部分内容,对一些过时的东西做了更正,以供大家参考吧. 在windows下编写R程序包

一个复杂的Windows下的socket程序

上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序.异样,server.cpp 为效劳器端代码,client 为客户端代码.效劳器端代码 server.cpp: #include <stdio.h> #include <winsock2.h> #pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll int main(){ //初始化 DLL WSADATA ws

一个简单的Windows下的socket程序

服务器端代码server.cpp: 1 #include <stdio.h> 2 #include <WinSock2.h> 3 #pragma comment(lib,"ws2_32.lib") //加载ws2_32.dll 4 5 int main() 6 { 7 //初始化DLL 8 /************************************************************************/ 9 /*调用WSASta

windows下编译erlang程序

erlang的编译方式有很多,这篇文章介绍一个在windows下简单好用的方法. 1.首先,在工程目录下面创建一个bat文件,内容为: "C:\Program Files (x86)\erl6.1\bin\erl.exe" -make 前面的目录是你的erlang安装目录: 2.然后,在工程目录下面创建一个Emakefile文件,Emakefile文件格式如下: { [ 'src/*', 'src/mod/*', 'src/pp/*', 'src/lib/*' ], [ debug_i

Windows下实现应用程序看门狗软件

有时候,我们需要确保一个应用程序长期稳定地运行,但是在Windows平台上由于种种原因,几乎不可能保障一个应用的绝对可靠运行.那么,我们就需要有一个机制,在应用死机﹑异常﹑系统重启等情况下自我恢复,而且能够做一些指定的动作,比如定时重启等. 方案一:把应用注册成服务,并把它放到启动项里.这个方法简单,但功能限制太大. 方案二:自己做一个服务管理器,定时检查服务运行情况.这个方法要自己开发代码,太麻烦. 方案三:找个第三方工具,比如AlwaysUP,Watchdog. 个人推荐AlwaysUP,它