看了孙鑫老师的视频,对vc++的一些概念有所了解。
以下 是第一课时的笔记:
关于消息,是用以下的数据结构来实现的:
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG;
HWND hwnd;
窗口句柄
UINT message;
表示消息类型,用宏表示,以wM_开头,例如MK_CONTROL 表示 ctrl 键被按下。
WPARAM wParam;
LPARAM lParam;
都是整数,代表关于该消息的附加信息。
例如WM_CHAR代表用户按下的事件,但是用户按下时系统并不知道哪一个键(A或B还是其他?)被按下了。于是就要把这些信息保存在附加信息中。
例如:
WM_CHAR在MSDN中:的定义:
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_CHAR
WPARAM wParam, // character code (TCHAR)
LPARAM lParam // key data
);
就是有WPARAM的参数来标识哪个ASCII码被按下。
(写程序的习惯:用变量类型来决定变量的用途。)
DWORD time;
Double word 双十六位的数,即三十二位。
对每一个应用程序,操作系统都会对其建立一个消息队列,即一个先进先出的缓冲区
WinMain 函数
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
);
LPSTR lpCmdLine, lp表示一个长指针,LPSTR指向字符串首地址的指针,用于接收命令行参数。
问题:多个参考怎么办?
该函数由操作系统去调用,并不是我们去调用。
设计窗口类:
typedef struct _WNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
Style的值一些说明:可以用 or (|) 运算符把不同的style连接起来。
CS_HREDRAW | CS_VREDRAW 水平大小变化时,窗口重画。
lpfnWndProc 回调函数:它可以赋值一个函数指针。
当收到某一消息时,操作系统会自动调用某个函数来处理消息。我们只需把这个函数注册到操作系统里。
这个函数需要自己写。
int cbClsExtra; 类的附加内存。系统自动赋予的。由属于这个窗口类的所有类所共享。
int cbWndExtra; 窗口附加内存。
HINSTANCE hInstance; 代表我们的应用程序当前实例号。可以通过winMain 的形参进行赋值。
HICON hIcon; 以用loadicon来对 该成员进行赋值。
函数:HICON LoadIcon(
HINSTANCE hInstance, // handle to application instance
LPCTSTR lpIconName // name string or resource identifier
);
微软给我们设定了一些标准图标,如果我们要使用这些标准备图标,就可以把第一个参数hInstance设为NULL。
可以用createIcon()来创建图标。