Windows应用程序框架两个基本函数

简介: 所有的windows应用程序必须包含两个基本函数WinMain()、Wnnproc(): 一、应用程序主函数WinMain()       WinMain()是所有应用程序的入口,类似C语言中的Main函数。

所有的windows应用程序必须包含两个基本函数WinMain()、Wnnproc():

一、应用程序主函数WinMain()

      WinMain()是所有应用程序的入口,类似C语言中的Main函数。它完成一系统的定义与初始化工作,并产生消息循环。


 

  1. int WINAPI WinMain(HINSTANCE hinstance,//程序本身的实例句柄
  2.                    HINSTANCE hPrevInstance,//应用程序其他实例句柄(因为多任务)
  3.                    LPSTR lpCmdLine,//指向字符串的指针,用来保存程序运行时的命令行参数
  4.                    int nCmdShow);//表示应用程序开始执行时窗口显示模式(如窗口放大、缩小)

 

     注意1因为windows是多任务的系统,所以同一应用程序的多个窗口可能会同时存在,windows系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识。

     在WinMain()函数中实现以下三个功能:注册窗口类、创建并初始化窗口、创建消息循环。

1、注册窗口类:

每个窗口都有一些基本属性,如窗口的大小、标题栏文字、背景色等。windows应用程序使用WNDCLASS结构体来定义窗口的各个属性。

 

  1. typedef struct tagWNDCLASS {
  2. DWORD style;        /* 窗口风格 */
  3. WNDPROC *lpfnWndProc; /* 窗口函数 */
  4. int cbCl***tra; /* 类变量占用的存储空间 */
  5. int cbWndExtra; /* 实例变量占用的存储空间 */
  6. HINSTANCE hinstance; /* 定义该类的应用程序实例的句柄 */
  7. HICON hicon; /* 图标对象的句柄 */
  8. HCURSOR hCursor; /* 光标对象的句柄 */
  9. HBRUSH hbrBackground; /* 窗口背景颜色的句柄 */
  10. LPCSTR lpszMenuName; /* 标识选单对象的字符串 */
  11. LPCSTR lpszClassName; /* 标识该类的名字的字符串 */
  12. } WNDCLASS;

 

定义完窗口类后,再使用Windows的API函数RegisterClass(&wndclass)注册窗口类。注册成功后,就能创建窗口了。

 

2、创建并初始化窗口:

用CreateWindow()函数用于创建该窗口,调用ShowWindow()和UpdateWindow两个函数来显示窗口。

 

3、创建消息循环:

WinMain()函数最后使用while语句创建一个消息循环,负责从消息循环队列中获取消息并分发给相应的窗口函数。


 

  1. While(GetMessage(&Msg,NULL,0,0))//获取消息


  2. {

  3. TranslateMessage(&Msg);//消息转换


  4. DispatchMessage(&Msg);//消息分发


  5. }



 

(2)窗口处理函数Wndproc()


 

  1.  LRESULT CALLBACK WndProc{ //WndProc名称可自由定义


  2.   HWND hwnd, //接收消息的窗口句柄,即像该窗口处理函数发生邀请的窗口


  3.   UINT message,

  4.   WPARAM wParam,

  5.   LPARAM lParam

  6. }


 

     在窗口函数中,根据接收的消息信息(mesage,wParam和Parm)进行判断,然后使用switch语句对应用程序接收到的不同消息进行响应,执行相应的程序模块。

      MFC应用程序也有一个WinMain函数,但程序员不需要编写该函数,该函数被封装在MFC的应用程序框架内,当应用程序启动时被自动调用。

相关文章
|
14天前
|
消息中间件 编译器 API
Windows窗口程序
Windows窗口程序
|
15天前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
|
1月前
|
Windows
实现Windows程序的数据更新
实现Windows程序的数据更新
12 0
|
1月前
|
Windows
构建布局良好的Windows程序
构建布局良好的Windows程序
11 0
|
1月前
|
C# Windows
初识Windows程序
初识Windows程序
10 0
|
2月前
|
Java Linux Windows
windows实现自动部署jar包运行程序
windows实现自动部署jar包运行程序
40 0
|
4月前
|
移动开发
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
|
3月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
93 1
|
2月前
|
Windows
火山中文编程 -- 第一个windows程序
火山中文编程 -- 第一个windows程序
12 0
|
6月前
|
C++ Windows
winform 程序打包成windows安装包
winform 程序打包成windows安装包前提:VS2019,winform 程序已经有一个完整可运行的 winform 程序。VS中上方扩展选项卡,选择 管理扩展,在打开的弹窗中选择联机,在右侧搜索框搜索 installer, 在中间显示的结果选择 Microsoft Visual Studio Installer Projects 点击下载。下载完成之后,关闭vs,自动打开扩展的安...
50 0
winform 程序打包成windows安装包