第二天讲述Win32框架(讲解的点主要是)
1、窗口的注册
2、窗口的创建
Win32创建窗口的步骤
1、入口函数
2、注册窗口类
3、创建窗口
4、显示窗口
5、更新窗口
6、消息循环
7、窗口结束
窗口注册部分代码注释
// 函数: MyRegisterClass()
//
// 目的: 注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;//其尾部出现EX,表示是这个类型的一个拓展类型
//如果想要在Window中绘制一个窗口,必须先注册一个窗口类
wcex.cbSize = sizeof(WNDCLASSEX);//表示其自身需要多大的变量
wcex.style = CS_HREDRAW | CS_VREDRAW;//窗口类风格(CS_HREDRAW表示水平刷新 CS_VREDRAW表示垂直刷新)
wcex.lpfnWndProc = WndProc;//函数指针,注册窗口时指明该窗口由谁来处理用户事件,这个函数名可以自定义但是必须带四个参数
wcex.cbClsExtra = 0;//额外的类信息
wcex.cbWndExtra = 0;//额外的窗口信息
wcex.hInstance = hInstance;//窗口的句柄
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY));//图标
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);//光标 IDC_ARROW 箭头型光标
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//窗口客户区背景颜色
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MY);//窗口菜单名
wcex.lpszClassName = szWindowClass;//窗口类名
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));//图标
return RegisterClassEx(&wcex);//调用系统的注册窗口类函数去注册上面准备好的类名
}
窗口的创建部分代码注释
在这里
//
// 函数: InitInstance(HINSTANCE, int)
//
// 目的: 保存实例句柄并创建主窗口
//
// 注释:
//
// 在此函数中,我们在全局变量中保存实例句柄并
// 创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 将实例句柄存储在全局变量中
//创建窗口
hWnd = CreateWindow(szWindowClass, //窗口类名(这里要与前面的注册窗口类型的类型名保持一致)
szTitle/*_T("我的窗口")*/,//窗口标题名(可以直接在这里更改窗口的标题名)
WS_OVERLAPPEDWINDOW,//窗口的风格
CW_USEDEFAULT, //从桌面的左上角为原点,x坐标是多少(CW_USEDEFAULT)表示默认
0,//y坐标,如果x使用CW_USEDEFAULT,y会自动匹配y坐标,否则y坐标就是这个参数不变
CW_USEDEFAULT,//窗口宽度,使用CW_USEDEFAULT,自动匹配窗口宽度
0,//窗口高度(窗口的宽高,包含了标题栏和边框的
NULL,//父窗口句柄
NULL, //菜单句柄,给null时表示用注册时的菜单,否则用自己重新定义的菜单
hInstance,//实例句柄
NULL);//预留信息
if (!hWnd)//当窗口创建不成功时
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);//显示窗口
UpdateWindow(hWnd);//更新窗口
return TRUE;
}