VC++之Windows程序运行原理小计


Windows程序运行原理

概述
入口函数----窗口-----消息循环----回调函数


1.程序入口函数WinMain
int WINAPI WinMain(
  HINSTANCE hInstance;
  HINSTANCE hPrevInstance;
  LPSTR lpCmdLine; //run command
  int nCmdShow; //show state
);

WinMain函数由操作系统调用,里面的所有参数都由操作系统赋值.
操作系统启动应用程序时,给它分配一个实例号,放到hInstance中,如果有参数,则放到lpCmdLine中,以及应用程序的状态等都由操作系统调用WinMain来实现.


2.窗口
1)设计一个窗口类;
2)注册一个窗口;
3)创建窗口;
4)显示及更新窗口;

1)WNDCLASS wndclass;
2)RegisterClass(CONST WNDCLASS *lpWndClass);
3)HWND CreateWindow(
  LPCTSTR lpClassName,
  LPCTSTR lpWindowName,
  DWORD dwStyle,
  int x,
  int y,
  int nWidth,
  int nHeight,
  HWND hWndParent,
  HMENU hMenu,
  HINSTANCE hInstance,
  LPVOID lpParam);
4)BOOL ShowWindow(HWND hWnd, int nCmdShow);
UpdateWindow(HWND hwnd);

typedef struct{
  UINT style;
  WNDPROC lpfnWndProc;
  int cbClsExtra; //窗口类的额外数据
  int cbWndExtra; //窗口的额外数据
  HINSTANCE hInstance; //the instance of current application
  HICON hIcon;
  HCURSOR hCursor;
  HBRUSH hbrBackground;
  LPCTSTR lpszMenuName;
  LPCTSTR lpszClassName;
}WNDCLASS,*PWNDCLASS;

--lpfnWndProc 过程函数(回调函数)
处理事件的代码;
由操作系统调用;
放置由用户编写的代码;

3.过程函数(回调函数)
LRESULT CALLBACK WindowProc(
  HWND hwnd,
  UINT uMsg,
  WPARAM wParam,
  LPARAM lParam
);

操作系统针对特定事件根据什么来调用相应过程函数进行处理?
调用的是接受消息的窗口所属类型中lpfnWndProc成员指定的函数.每一种窗口都有自己专属的回调函数.

--hInstance 当前应用程序实例号
由WinMain函数中的hInstance形参赋值

4.消息
操作系统将每一个事件包装成消息的结构体MSG传递给应用程序
MSG定义:
typedef struct tagMSG{  
  HWND hwnd; //handle to window --1 
  UINT message; // --2
  WPARAM wParam;
  LPARAM lParam;
  DWORD time;
  POINT pt;
}

--1 句柄
资源的标识
图标,光标,窗口,实例

--2 宏
用来代替数值,WM开头

5.消息循环
应用程序通过GetMessage函数来调用操作系统放到消息队列中的消息.
BOOL GetMessage(
  LPMSG lpMsg,
  HWND hWnd,
  UINT wMsgFilterMin,
  UINT wMsgFilterMax
);

TranslateMessage()对取到的WM_KEYDOWN,WM_KEYUP消息进行转换,转换为一个WM_CHAR消息
放到消息队列中。
DispatchMessage()将收到的消息传到操作系统,然后操作系统将MSG结构体中前四个参数传
递给回调节函数,并调用这个回调函数中进行处理。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值