本笔记源自windows游戏编程大师技巧第二版2.8章,记做学习随笔。
使用vs2017环境编译。
要创建一个窗口,需要使用CreateWindowEx()函数。
该函数是创建Windows类的函数,把我们上一篇WNDCLASSEX类实例化,使用到创建窗口中去。
首先看一下CreateWindowEx()函数原型:
HWND CreateWindowEx(
DWORD DdwExStyle, //窗口的扩展风格
LPCTSTR lpClassName, //指向注册类名的指针
LPCTSTR lpWindowName, //指向窗口名称的指针
DWORD dwStyle, //窗口风格
int x, //窗口的水平位置
int y, //窗口的垂直位置
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hWndParent, //父窗口的句柄
HMENU hMenu, //菜单的句柄或是子窗口的标识符
HINSTANCE hInstance, //应用程序实例的句柄
LPVOID lpParam //指向窗口的创建数据
);
该函数创建成功的话,返回一个指向新建窗口的句柄,也就是HWND。
来详细解释一下:
dwExStyle——设置一些属性,一般为NULL
lpClassName——设置之前的创建基础类名,例如“MYNCLASS1”。就是上篇winclass.lpszClassName设置的值。
lpWindowName——窗口的名称。
dwstyle——这是一个说明窗口外观的通用标志,见下表。任意组合得到你想要的各种特征。
x,y——设置窗口右上角的位置。
nWidth,nHeigth——设置窗口宽高。
hWndParent——如果有父窗口填父窗口的句柄,没有就取NULL。
hMenu——指向附属窗口的句柄,下一篇介绍,现在取NULL。
hInstance——这是应用程序的实例。这里使用WinMain()中第一个实参,hinstance句柄。
lpparame——设为NULL即可,平时用不到。
#include <Windows.h>
#include <windowsx.h>
#define WIN32_LEAN_AND_MEAN
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline,int ncmdshow)
{
WNDCLASSEX winclass;
winclass.cbSize = sizeof(WNDCLASSEX);
winclass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS;
winclass.lpfnWndProc = WndProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinstance;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = "WINCLASS1";
winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
//新加入的代码
HWND hwnd;
if (!(hwnd = CreateWindowEx(NULL,
"WINCLASS1", //winclass.lpszClassName设置的字符,是类的别名。
"YouWindows", //窗口的名称
WS_OVERLAPPEDWINDOW | WS_VISIBLE, //一些窗口属性
0, 0, //窗口位置
400, 400, //窗口宽高
NULL, //父窗口句柄
NULL, //附属窗口句柄
hinstance, //WinMain第一个实参,程序句柄。
NULL //null就可以了
)))
return 0; //if判断一下hwnd是否为空。
}
这就是我们目前的代码,但是他还不能运行,我们仍没有写WndProc()的定义。