VC笔记

想不到沦落到学习已经过时的技术——VC+MFC,但终究是要学习,不如做点笔记。留下点痕迹也是好的。内容选自《VC++深入详解》


Chapter 1 Windows程序内部运行机制

Windows操作系统提供的API,1000多种,使用MSDN,<windows.h>
SDK,Software Development Kit,软件开发包。Win32 SDK,Windows 32位操作系统下的软件开发包(API,帮助文档,辅助开发工具等)


窗口,客户区和非客户区。父窗口和子窗口,对话框和消息框窗口。
窗口标识——窗口句柄(HWND),句柄是资源的标识号。图标句柄(HICON),光标句柄(HCURSOR),画刷句柄(HBRUSH)


Windows程序设计模式,事件驱动,基于消息的。发送消息和响应消息。
操作系统感知消息,包装消息,投递消息到应用程序的消息队列中。应用程序从消息队列中取出消息,响应消息。
窗口过程,专门负责处理消息。消息结构体,如下:


typedef struct tagMSG
{
    HWND hwnd;
    UINT message;//消息标识符,unsigned int,WM_XXX(windows message。。。)
    WPARAM wparam;//unsigned int
    LPARAM lparam;//long
    DWORD time;//双字,32位 unsigned int,WORD 16位无符号整数
    POINT pt;
}MSG, *LPMSG;


Windows程序言行机制:把消息放入消息队列,Windows操作系统用消息循环取得消息,响应。
消息分为仅对消息和不进队消息,不进队消息由系统调用窗口时直接递交给窗口。最终消息都是由系统调用窗口过程函数处理。


windows程序入口——WinMain函数
int WINAPI WinMain
(
HINSTANCE hinstance,//当前运行的实例的句柄
HINSTANCE hprevinstance,//当前实例前一个实例的句柄
LPSTR cmdline,//相当于char *,参数-Project Setting Debug ProgramArguments
int cmdshow//窗口如何显示,最大化,最小化,隐藏。
);


WINAPI实际上是__stdcall,


窗口结构体:
typedef struct _WNDCLASS
{
    UINT style;//窗口样式,CS_XXX
    WNDPROC wndproc;//这是函数指针,指向窗口过程函数。回调函数,不是本方显式调用的,而是另一方调用的。
    int cbClsExtra;//类附加内存空间,同类型窗口共享,一般置为0
    int cbWndExtra;//窗口附加内存,窗口特有,一般置为0
    HANDLE hinstance;//包含窗口过程函数的实例句柄
    HICON hicon;//图标资源句柄,NULL为默认。LoadIcon(hInstance,LPCTSTR lpIconName)
    HCURSOR hcursor;//光标资源句柄
    HBRUSH hbrbackground;//窗口类句柄画刷句柄
    LPCTSTR lpszMenuName;//菜单资源的名字,LPCTSTR=const char *
    LPCTSTR lpszClassName;//窗口类资源的名字
}WNDCLASS;
.rc文件,保存资源脚本


LRESULT-long,CALLBACK-__stdcall
__stdcall和__cdecl是两种不同的函数调用约定。定义了函数参数入栈顺序,由调用函数还是被调用函数将参数弹出栈。
Win32 API都遵循__stdcall调用约定,windows回调函数必须遵循__stdcall约定。
printf遵循__cdecl约定,VC++默认编译选项__cdecl


注册窗口类:ATOM RegisterClass(const WNDCLASS *wndclass);
创建窗口:
HWND CreateWindow
(
    LPCTSTR lpClassName,
    LPCTSTR lpWindowName,
    DWORD dwStyle,
    int x,
    int y,
    int nWidth,
    int nHight,
    HWND hWndParent,
    HMENU hMenu,
    HANDLE hInstance,
    LPVOID lpParam
);


显示窗口:
BOOL ShowWindow
(
    HWND hwnd,
    int nCmdWnd//SW_HIDE,SW_SHOW,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED,SW_SHOWNORMAL,
);
更新窗口:
BOOL UpdateWindow(HWND hwnd);


取出消息函数:
BOOL GetMessage
(
    LPMSG lpMsg,
    HWND hWnd,//NULL,接收属于调用线程的所有窗口的窗口消息
    UINT wMsgFilterMin,//获取的消息的最小值,通常置为0
    UINT wMsgFilterMax//获取的消息的最大值,若Min=Max=0,则接收所有消息。
);
接收到WM_QUIT消息,返回0;错误返回-1;其它返回非0值。
BOOL PeekMessage
(
    LPMSG lpMsg,
    HWND hWnd,//NULL,接收属于调用线程的所有窗口的窗口消息
    UINT wMsgFilterMin,//获取的消息的最小值,通常置为0
    UINT wMsgFilterMax,//获取的消息的最大值,若Min=Max=0,则接收所有消息。
    UINT wRemoveMsg//消息获取方式,PM_NOREMOVE不从消息队列中移除,PM_REMOVE从消息队列中移除
);
发送消息函数:SendMessage,PostMessage
消息循环代码:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);//产生新的消息
    DispatchMessage(&msg);//消息回传给操作系统。
}




Chapter 3 MFC框架程序剖析
MFC(Microsoft Foundation Class),MFC库是开发Windows程序的C++接口。
SDI(Single Document Interface,单文档界面):主框架窗口和View窗口
AppWizard向导生成的类:CMainFrame,CProjectNameApp:CFrameWnd,CProjectNameDoc:CDocument,CProjectNameView


MFC中,类的命名约定(非必须)都以C开头。
CWnd类封装了与窗口有关的操作,子类有CView、CFrameWnd。


每一个MFC程序实例都有且只有一个该派生类的实例化对象theApp。
AfxWinMain函数,Afx-Application Framework,应用程序框架。Afx开头的函数都是全局函数,可以在任何地方使用。


MFC提供一个Document/View结构,Document是CDocument类,View是CView类
Document:数据的存储和加载。
View:数据的显示和修改
CAboutDlg类:帮助对话框类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值