孙鑫MFC笔记教程(1)--Windows程序的内部运行原理

本文介绍了Windows程序设计的基础知识,包括操作系统与应用程序的关系、事件驱动方式以及消息队列的工作原理。重点讲解了创建窗口的四个步骤,详细分析了窗口类WNDCLASS、消息结构MSG以及WinMain函数。还探讨了回调函数WindowProc的角色,以及消息循环的处理流程,强调了GetMessage、TranslateMessage和DispatchMessage函数的重要性。通过对消息的处理和回调函数的编写,实现了窗口的响应功能。
摘要由CSDN通过智能技术生成

 

Windows程序的内部运行原理

 

操作系统和应用程序之间的关系:

应用程序到操作系统表示应用程序可以通知操作系统执行某个具体的动作

操作系统到应用程序表示操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。

 

windows程序设计是种事件驱动方式的程序设计,主要基于消息的。当用户需要完成某种功能时,需要调用OS某种支持,然后OS将用户的需要包装成消息,并投入到消息队列中,最后应用程序从消息队列中取走消息并进行响应。

每个应用程序OS都为它建立一个消息队列,消息队列是个先进先出的缓冲区,其中每个元素都是一个消息,OS将生成的每个消息按先后顺序放进消息队列中,应用程序总是取走当前消息队列中的第一条消息,应用程序取走消息后便知道用户的操作和程序的状态,然后对其处理即消息响应,消息响应通过编码实现。

 

建一个完整的窗口需要经过下面四个操作步骤

设计一个窗口类。如:WNDCLASS wndcls

注册窗口类。如:RegisterClass(&wndcls)

创建窗口。如:CreateWindow(),CreateWindowEX();

显示及更新窗口。如:ShowWindow(),UpdateWindow();

 

消息的结构:

typedef struct tagMSG {

HWND hwnd; //接收消息的窗口句柄,和哪个窗口相关联。

UINT message; //消息标识,消息本身是什么,如WM_CHAR

WPARAM wParam; //消息的附加信息,具体取决于消息本身。

LPARAM lParam;

DWORD time; //消息投递时间。

POINT pt; //消息投递时,光标在屏幕上的位置。

} MSG;

 

WinMain函数结构:

int WINAPI WinMain(

HINSTANCE hInstance, // 当前实例句柄。

HINSTANCE hPrevInstance, //上一个该程序的实例句柄,32位系统中此值都为NULL

LPSTR lpCmdLine, // 命令行指针

int nCmdShow // (窗口)显示的状态

);

要带参调用WinMain类似于命令行的功能,在Project->setting->Debug->Program arguments项填写参数

 

窗口类WNDClass

typedef struct _WNDCLASS {

UINT style; //窗口的类型

WNDPROC lpfnWndProc; //窗口过程函数指针(回调函数)

int cbClsExtra; //窗口类附加字节,为该类窗口所共享。通常0。

int cbWndExtra; //窗口附加字节。通常设为0。

HANDLE hInstance; //当前应用程序事例句柄。

HICON hIcon; //图标句柄 LoadIcon();

HCURSOR hCursor; //光标句柄 LoadCursor();

HBRUSH hbrBackground; //画刷句柄 (HBRUSH)GetStockObject();

LPCTSTR lpszMenuName; //菜单名字

LPCTSTR lpszClassName; //类的名字

} WNDCLASS;

 

 

源码(在VC中建立Win32 Application):

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值