[读书笔记]Windows程序内部运行机制【一】

API:应用程序编程接口。

SDK:软件开发包,开发包中包含API函数,帮助文档,使用手册,辅助工具等资源。

窗口都是通过窗口句柄(HWND)来标识的。例如图标,光标,画刷。

 

1.MFC生成的C++源文件中都有StdAfx.h,此文件包含了常用的AFX函数的声明,其中有afxwin.h,此文件包含了CRECT,CPoint,CWnd等许多类及其方法的声明。

 

2.在VC++开发环境中向应用程序传递参数:Project->Setting->Debug,在Program arguments编辑框可以输入入命令行参数。

发送消息用SendMessage(不进入消息队列)和PostMessage。

注:想去掉样式可以先对一个样式取反,在与原变量相与。

菜单资源为IDM_,图标资源为IDI_,按钮资源为IDB_,这样一目了然。

菜单并不是一个窗口,如果使用菜单资源ID号,那么需要用MAKEINTRESOURCE宏进行转换。

窗口发生重绘的情况:主要是WM_PAINT消息。调用UpdateWindow,Invalidate(),会发生重绘。

窗口大小的改变是否会发生重绘取决于WNDCLASS结构体中的style成员是否设置了CS_HREDRAWCS_VREDRAW标识。

如果想让某个图形一直在窗口显示,就应该把绘制图形的操作方WM_PAINT消息中。

BeginPaint()得到窗口DC,但是只能在WM_PAINT消息中使用,在其他地方只能使用GetDC()来获取DC句柄。

要控制程序是否退出,应该在WM_CLOSE消息中响应,不是在WM_DESTORY消息中。

3.在SDK中要加入"windows.h"和stdio.h。因为LoadCursor,MessageBox等函数的声明在这个文件中。

程序实现步骤:WinMain函数的定义,创建一个窗口,进行消息循环,编写窗口过程函数

4.创建一个完整的窗口的四个步骤SDK,1设计窗口类,2注册窗口类,3创建窗口,4显示窗口

 

5.函数名可以代表函数代码的首地址,即可作为函数指针。

 

6.要查看VC数据类型,可以在MSDN中输入“BOOL”然后选择“DATA TYPE”。

 

7.atof将字符串转化为float,atoi将字符串转化为int型。

 

8.所有从CWnd类派生的类都有m_hWnd句柄。

 

9.变量的生命周期:可以认为出了包含它的大括号,这个变量的生命周期结束。所以全局变量的声明位于所有大括号之外。但是用new声明的变量和用static声明的变量除外。

 

10.SDK示范程序,见下面。

 

11.sprintf格式化字符,其头文件为stdio.h,在MFC中格式化字符用CString.Format

 

12.GetDC()与ReleaseDC()要成对使用,否则会内存泄漏。同样,BeginPaint()与EndPaint()。

 

13.GetStockObject()得到画笔、画刷、字体、调色板的句柄,使用时必须用类型转换。

 

14.什么时候用NULL,什么时候用0.

答,对指针赋值时用NULL,对变量赋值时用0.

 

15.什么是野指针?

答:将指针指向的变量的内存释放后,此指针即变成野指针!如何避免野指针?

答:将此指针指向NULL即可。p=NULL;

 

16.SDK代码流程:

#include "windows.h"//包含头文件LoadCursor,TextOut等函数

#include "stdio.h"//包含sprintf,printf等函数

LRESULT CALLBACK MyProc(...);//声明回调函数

int WINAPI WinMain()

{

WNDCLASS wndcls;//设计窗口类

wndcls.hcursor=LoadCursor();//初始化

....

RegisterClass(&wndcls);//注册窗口类

hwnd=CreateWindow(...);//创建窗口

ShowWindow(..);//显示窗口

UpdateWindow(..);

MSG msg;//定义消息结构体

while(GetMessage(...))//消息循环

{

...

}

return 0;

}

LRESULT CALLBACK MyProc(...)//实现回调函数

{

switch(uMsg)

{

case WM_CHAR:

break;

...

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值