Windows动态窗口创建

WIndows动态窗口创建

窗口创建流程

注册窗口类并创建窗口本身
->设置窗口过程函数
->设置窗口大小风格以及菜单栏
->创建窗口并获得其句柄
->显示窗口

创建窗口详解

窗口使用主函数说明

**int WINAPI wWinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPWSTR cmdLine,int nShow) **

//应用程序当前实例的句柄

//应用程序的前一个实例的句柄(将一直是NULL)如果想确定该应用程序是否已经有实例在运行,文档推荐使用CreateMutex函数来创建唯一名字的mutex(互斥体),当已经有实例运行时,再次创建mutex,CreateMutex函数将返回ERROR_ALREADY_EXISTS.

//使用Unicode编码的LPWSTR,应用程序的命令函有程序外部输入,如cmd命令终端,快捷方式提供的命令参数

//窗口被显示为那个模式的ID号(例如最小化,正常,最大化等)


创建窗口本身并注册窗口类

WNDCLASSEX wndClass = {0};	
	wndClass.cbSize=sizeof(WNDCLASSEX);     //该结构所占字节数	
	wndClass.style = CS_HREDRAW|CS_VREDRAW;    //用于定义窗口的外观	

wndClass.lpfnWndProc = WndProc;    //窗口回调函数,来自操作系统的事件都通知调用此函数		
  (该语句设置窗口过程函数)

wndClass.hInstance = hinstance;    //该窗口类包含窗口过程的程序实例句柄		
	wndClass.hCursor = LoadCursor(NULL,IDC_ARROW);    //鼠标形状的资源ID号		
	wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);    //用于绘制窗口背景的背景画刷句柄		
	wndClass.lpszMenuName = NULL;    //菜单,以null结束的字符串的资源名字	
	wndClass.lpszClassName = "DX11BookWindowClass";    //以null结束的创建的窗口类名(256字符以下		
	//cbClsExtra:分配给该窗口结构额外的字节数		
	//cbWndExtra:分配给改窗口实例额外的字节数		
	//hlcon:程序显示的图标的资源ID号,NULL为默认图标		
	//hlconSm:窗口小图标句柄		
	if(!RegisterClassEx(&wndClass))   //注册窗口类  Ex为新版注册窗口函数		
  return -1;
ClassStyle
名称define
CS_VREDRAW0x0001
CS_HREDRAW0x0002
CS_DBLCLKS0x0008
CS_OWNDC0x0020
CS_CLASSDC0x0040
CS_PARENTDC0x0080
CS_NOCLOSE0x0200
CS_SAVEBITS0x0800
CS_BYTEALIGNCLIENT0x1000
CS_BYTEALIGNWINDOW0x2000
CS_GLOBALCLASS0x4000
CS_IME0x00010000
#if(_WIN32_WINNT >= 0x0501)
#define CS_DROPSHADOW       0x00020000
#endif /* _WIN32_WINNT >= 0x0501 */

创建窗口风格及菜单

RECT rc = {0,0,640,480};
AdjustWindowRect(&rc,WS_OVERLAPPEDWINDOW,false); //窗口大小,窗口风格,菜单

窗口风格
窗口风格
WS_OVERLAPPEDWINDOWWS_OVERLAPPED
WS_CAPTIONWS_SYSMENU
WS_THICKFRAMEWS_MINIMIZEBOX
WS_MAXIMIZEBOXWS_POPUPWINDOW
WS_POPUPWS_BORDER
WS_CHILDWINDOWWS_CHILD

创建窗口偶并获得其句柄

HWND hwnd = CreateWindow(
“Dx11BookWindowClass”,
“Blank Win32 Window”,
WS_OVERLAPPEDWINDOW,0,0,
rc.right-rc.left,rc.bottom-rc.top,
NULL,NULL,hinstance,NULL
);

函数原型
#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,
nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)

显示窗口

ShowWindow(hwnd,nShow);

窗口过程函数

//Blank 窗体Demo的窗口过程函数		
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)		
{		
    PAINTSTRUCT ps;		
	HDC hDC;		
	switch(message)		
	{		
	case WM_PAINT:  //响应绘制消息		
		hDC = BeginPaint(hwnd,&ps);		
		EndPaint(hwnd,&ps);		
		break;		
	case WM_DESTROY:  //退出消息		
		PostQuitMessage(0);		
		break;		
	default:		
		return DefWindowProc(hwnd,message,wParam,lParam);    //缺省处理		
	}		
	return 0;		
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值