windows编程笔记【三】注册windows类 创建窗口

本笔记源自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()的定义。

猜你喜欢

转载自blog.csdn.net/nullccc/article/details/81221383