WinMain()

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1、WinMain()函数
    首先,必须要声明一个WinMain()函数(为了简明起见,这里先不讨论_tWinMain这个宏,也不考虑Unicode的问题),它的原型在Windows.h中定义:

int WINAPI WinMain(HINSTANCE hInstance, //程序当前实例的句柄,以后随时可以用GetModuleHandle(0)来获得 

                                HINSTANCE hPrevInstance,   //这个参数在Win32环境下总是0,已经废弃不用了   

                                char * lpCmdLine, //指向以/0结尾的命令行,不包括EXE本身的文件名,

                                                              //以后随时可以用GetCommandLine()来获取完整的命令行   

                                int nCmdShow      //指明应该以什么方式显示主窗口

);

声明,并且实现这个函数,让Linker程序可以找到它,让编程语言的运行时刻库在完成一些必要的初始化工作后,能够正确地调用它。所以,认为它就是程序的入口点,也是一种简单的“抽象法则”。

在这个入口点函数中,需要按顺序做下面几件事(如果是基于事先设计并存放在资源里的对话框的程序,稍有不同,以后再说):

 
  (1)用RegisterClassEx函数登记一个独一无二的Class


  (2)用CreateWindowEx函数创建一个主窗口


  (3)进入一个”消息循环“,直到收到WM_QUIT消息


  (4)从WinMain函数返回
 
    基本上所有的流程都如出一辙,所以完全可以设计出一个“Template模式”出来重用,让以后的程序直接从某个抽象基类继承,实现基类所需的虚方法就可以了.

2、窗口消息回调函数

    简单地说,回调(Callback)函数就是一个按规定原型实现的一个函数,让别人来调用。比如说,每个窗口都有一个窗口类(用

RegisterClassEx登记的Class,或者系统缺省已实现的Class),每个窗口类有一个回调函数,当窗口收到WIndows消息的时候,就会去调用这个回调函数,而这个回调函数的代码是程序员自己写的,用来根据实际情况处理不同的窗口消息。

 

3、登记窗口类
    在创建主窗口之前,一定要先用RegisterClassEx这个API函数登记一个类,类名必须是独一无二的,所以一般都用GUID字串来做类名。

 

4、创建主窗口
    (略,直接看完整代码)

 

5、消息循环
    消息循环很简单,仅当GetMessage这个API函数返回FALSE时,才退出循环。而GetMessage()仅当处理到消息队列中的WM_QUIT消息时才会返回FALSE。

 

下面代码生成了一个title为Demo的窗口。

 

入口函数( main、WinMain 入口函数( main、WinMain) 在C/C++中,我们知道有一个如下格式的函数: int main(int argc, _TCHAR* argv[]) { return 0; } 该函数是C/C++中的入口函数,而在WindowsAPI中也有自己的入口函数,该函数的格式为: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { return 0; } 立即下载

相关推荐

Windows 编程之WinMain

每一个Windows程序都有一个程序入口点函数:WinMain或者wWinMain,下面是wWinMain的定义

youjiaqu的博客 596

WinMain(GetModuleHandle(0),NULL,NULL,0);

//--------------------------------------------------------------------------- #include #include #pragma hdrstop //--------------------------------------------------------------------------- #prag

autumn20080101的专栏 925

C语言winmain函数的参数,WinMain()函数详解

WinMain()函数DOS下的C语言从main()开始,Windows下的C语言从WinMain()开始,一个空的WinMain()函数是这样的:int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){return(0);}一个函数即使什么也没做,也应该返回一个...

weixin_27268733的博客 2893

WinMain()函数

原型:int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 参数:第一个参数hInstance是唯一标识本程序的实例句柄,系统和其他应用程序通过该句柄与本程序通信。       第二个参数hPrevInstance是本程序的前一个实例句柄,由于3

u010089648的专栏 1401

MFC中的WinMain()入口去哪了?

学过一段时间的MFC之后,很多人大概都有一个疑问:在MFC中,WinMain()哪去了?因为任何一个使用过Win32 SDK编程的人都知道,WinMain()函数是Win32程序开始的入口点,可是在MFC的框架使用中,一般我们只知道从CWinApp类继承得到一个新类,然后重写InitInstance()虚函数,程序框架就可以运行了。哪么,在MFC中,WinMain()倒底去哪了?   似乎微软就是...

qq_23350817的博客 997

MFC框架中消失的WinMain()

学过一段时间的MFC之后,很多人大概都有一个疑问:在MFC中,WinMain()哪去了?因为任何一个使用过Win32 SDK编程的人都知道,WinMain()函数是Win32程序开始的入口点,可是在MFC的框架使用中,一般我们只知道从CWinApp类继承得到一个新类,然后重写InitInstance()虚函数,程序框架就可以运行了。哪么,在MFC中,WinMain()倒底去哪了?   似乎微软就

gencheng的专栏 8731

WinMain()和wWinMain()的差异

​特性​WinMain​wWinMain​编码方式ANSIUnicode​推荐使用兼容性场景现代开发首选​参数处理需手动处理编码转换直接使用 Unicode 字符串​入口点选择链接器根据编译选项自动决定链接器根据编译选项自动决定通过上述差异,开发者可根据项目需求选择合适的入口点函数,并充分利用 Unicode 的优势提升程序的扩展性和兼容性。

felicity_one的博客 1156

VC++中的WinMain()函数介绍

WinMain()函数  WinMain()函数等价于控制台程序中的main()函数。该函数是执行开始的地方,也是为程序其余 部分执行基本初始化工作的地方。为了允许 Windows 传递数据,WinMain()函数有 4 个形参和一个 int类型的返回值,其原型如下:  int WINAPI WinMain(HINSTANCE hInstance,  HINSTANCE hPrevIns

sky0942的博客 3495

win32API 入口WinMain()内部机理

win32API 入口WinMain()内部机理 入口 WinMain() 前面戴两重“帽子”:一个"int"是指返回值; 一个WINAPI指“调用约定”。 后面有四个参数: HINSTANCE hInstance, 由操作系统生成的“当前实例句柄”。 HINSTANCE hPrevInstance,"先前实例句柄"----已经遭废弃,以前有用到过,现在已无用。“二货”都会遭到”...

weixin_33921089的博客 155

WinMain()函数和消息循环

WinMain()函数  http://baike.baidu.com/view/1002349.htm?fr=aladdin 消息循环:  http://baike.baidu.com/view/3068833.htm

觅梦云的专栏 781

为什么mfc的入口是InitInstance()而没有WinMain()

为什么mfc的入口是InitInstance()而没有WinMain() 学过PE文件格式,就明白,程序在进入WinMain之前要做很多事情, 比如初始Dos头,分配函数表,初始化全局变量,之后才进入程序入口(WinMain) MFC对WindowsAPI进行了封装。在用向导编译成的二进时代码,MFC编译器链接器把源文件编译成PE文件格式存储在磁盘上。 程序执行的时

zxy355的专栏 2216

WinMain()主函数

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) { MessageBoxA(NULL,"TRY A TRY","MY TRY", MB_OK | MB_ICONEXCLAMATION ); return (

四夕日 月 1万+

纯C++创建Windows窗体(理解WinMain()与WndProc())

一直比较关注本质的东西。VC封装了很多,想了解一下比较麻烦。 先从了解WinMain()入口函数与WndProc()消息处理函数开始吧。 大气象 #include <windows.h>#include <mmsystem.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); //声名消息处理函数(处理...

weixin_33894992的博客 331

main(),_tmain(),WinMain(),wmain()四个函数区别

介绍一下main(),_tmain(),WinMain(),wmain()这四个函数的   1   各自的特点(不同点)   2   使用方法   3   使用场合main()WINDOWS的控制台程序(32BIT)或DOS程序(16BIT),   WinMain()WINDOWS的GUI程序,   wmain()是UNICODE版本的main(),   _tmain()是个宏,如果是UN

a_1984的专栏 677

WinMain() 函数

<br />WinMain - 函数功能<br /><br />函数功能:该函数被系统调用,作为一个32位应用程序的入口点。<br /><br />函数原型:int WINAPI WinMain(HINSTANCEE hlnstance,HINSTANCE hPrelnstance,LPSTR lpCmdLine,int nCmdShow);<br /><br />WinMain - 参数<br /><br />hinstance:应用程序当前事例的句柄。<br /><br />hPrelnstance:应

当 C 遇 到 ++ 523
上一篇: 驱动级键盘记录器与安全密码框(能获取QQ密码)
下一篇: 简明Python教程的一个例子
dylanlrp
博客等级 码龄19年 23粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值