【游戏开发】实现自定义游戏窗口

//Windows窗口头文件
#include <windows.h>

//窗口宽度
#define WINDOW_WIDTH	800	
//窗口高度
#define WINDOW_HEIGHT	600
//窗口标题
#define WINDOW_TITLE	L"【游戏开发】自定义游戏窗口"

//窗口过程函数
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );

//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
	//定义窗口类
	WNDCLASSEX wndClass = { 0 };

	//结构体的字节数大小
	wndClass.cbSize = sizeof( WNDCLASSEX ) ;	

	//窗口的样式
	wndClass.style = CS_HREDRAW | CS_VREDRAW;	

	//指向窗口过程函数的指针
	wndClass.lpfnWndProc = WndProc;		

	//窗口类的附加内存,取0
	wndClass.cbClsExtra		= 0;		

	//窗口的附加内存,依然取0
	wndClass.cbWndExtra		= 0;		

	//窗口过程的程序的实例句柄
	wndClass.hInstance = hInstance;						

	//ico图标
	wndClass.hIcon=(HICON)::LoadImage(NULL,L"天龙八部图标.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);

	//光标句柄
	wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); 

	//画刷句柄
	wndClass.hbrBackground=(HBRUSH)CreateSolidBrush(RGB(255,255,255));  

	//指定菜单资源的名字
	wndClass.lpszMenuName = NULL;					

	//指定窗口类的名字
	wndClass.lpszClassName = L"TWJDWQ";

	//注册窗口类
	if( !RegisterClassEx( &wndClass ) )			
		return -1;		

	//创建窗口
	HWND hwnd = CreateWindow( L"TWJDWQ",WINDOW_TITLE,	
		WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,
		WINDOW_HEIGHT, NULL, NULL, hInstance, NULL );

	//窗口显示的位置
	MoveWindow(hwnd,250,80,WINDOW_WIDTH,WINDOW_HEIGHT,true);
	
	//显示窗口
	ShowWindow( hwnd, nShowCmd );

	//更新窗口
	UpdateWindow(hwnd);	

	//定义并初始化msg
	MSG msg = { 0 };		

	//消息循环
	while( msg.message != WM_QUIT )			
	{
		//查看并派发消息
		if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
		{
			//将虚拟键消息转换为字符消息
			TranslateMessage( &msg );		

			//捕捉消息给窗口
			DispatchMessage( &msg );
		}
	}

	//注销窗口类
	UnregisterClass(L"TWJDWQ", wndClass.hInstance); 
	return 0;  
}

//处理窗口消息
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )      
{
	switch( message )						
	{
	//绘制
	case WM_PAINT:						
		ValidateRect(hwnd, NULL);		
		break;									

	//按键
	case WM_KEYDOWN:     
		//按键为ESC,销毁窗口,并发送一条WM_DESTROY消息
		if (wParam == VK_ESCAPE)    
			DestroyWindow(hwnd);		
		break;							

	//销毁
	case WM_DESTROY:		
		//请求终止,并发送一条WM_DESTROY消息
		PostQuitMessage( 0 );		
		break;					

	//缺省
	default:									
		return DefWindowProc( hwnd, message, wParam, lParam );	
	}

	return 0;	
}

 

WNDCLASSEX结构体:

第一个参数:结构体的字节大小。

第二个参数:窗口的样式。

第三个参数:指向窗口过程函数的指针。

第四个参数:窗口类附加内存。

第五个参数:窗口的附加内存。

第六个参数:当前窗口的实例句柄。

第七个参数:图标。

第八个参数:光标。

第九个参数:背景画刷。

第十个参数:指定菜单资源,如下拉菜单编辑、保存、载入等。

第十一个参数:窗口类的名字。

第十二个参数:窗口类的小图标,任务栏右下角托盘中应用程序显示的小图标。忽略不写。

 

CreateWindow函数:

第一个参数:窗口类的名称。

第二个参数:窗口的名称。

第三个参数:窗口样式。WS_OVERLAPPEDWINDOW代表的窗口类型:有标题栏、系统菜单、可调的边框以及最大化、最小化的窗口样式。

第四个参数:窗口的水平位置。

第五个参数:窗口的竖直位置。

第六个参数:窗口宽度。

第七个参数:窗口高度。

第八个参数:被创建窗口的父窗口句柄。

第九个参数:窗口菜单资源句柄。

第十个参数:窗口所属的应用程序实例的句柄。

第十一个参数:在MFC程序中创建多文档界面时会用到。

 

MoveWindow函数:

第一个参数:窗口句柄。

第二个参数:水平位置。

第三个参数:竖直位置。

第四个参数:窗口宽度。

第五个参数:窗口高度。

第六个参数:在消息处理函数中收到WM_PAINT消息时是否重绘。

 

ShowWindow函数:

第一个参数:窗口句柄。

第二个参数:窗口的显示状态。

 

 

 

阅读更多

没有更多推荐了,返回首页