DX_WIN32程序搭建

初學!!!以下都是一些常用的,F12查看所需要的函數。
簡單搭建。。。。。。

#include <Windows.h>
#include <tchar.h>
//#pragma comment(lib,"winmm.lib")
HINSTANCE g_hInstanc;//應用程序實例句柄(操作某個對象的一個指針)
HWND g_hWnd=0;//窗口句柄

/*
	HINSTANCE hInstance, //操作系統分配給該應用程序的實例句柄
	HINSTANCE hPrevInstance, //該應用程序的上一個應用程序實例句柄
	LPSTR lpCmdLine, //使用命令行執行應用程序時,命令行參數
	int nShowCmd//指定窗口如何顯示
*/

//LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);

//函數聲明
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	/*
		(1)新建窗口類結構體WNDCLASSEX
		(2)註冊Windows類
		(3)創建窗口
		(4)事件處理(主事件循環)
	*/
	WNDCLASSEX winClass;//創建窗口類結構體對象
	ZeroMemory(&winClass,sizeof(winClass));//對結構體歸0
	winClass.cbClsExtra = 0;//原是爲指示Windows將附加的運行時間信息保存到Windows類某些單元中而設計,一般設0
	winClass.cbSize = sizeof(WNDCLASSEX);//結構體大小sizeof(對象/類型)
	winClass.cbWndExtra = 0;//原是爲指示Windows將附加的運行時間信息保存到Windows類某些單元中而設計,一般設0
	winClass.hbrBackground =(HBRUSH)GetStockObject(DKGRAY_BRUSH);//窗口背景顏色
	winClass.hCursor = LoadCursor(hInstance, IDC_APPSTARTING);//鼠標指針
	winClass.hIcon = LoadIcon(hInstance, IDI_APPLICATION);//應用程序圖標類型
	winClass.hIconSm = 0;//小應用程序圖標,如標題欄和任務欄
	winClass. hInstance = hInstance;
	winClass.lpfnWndProc = WindowProc;//消息處理函數 
	winClass.lpszClassName = TEXT("MyWindow");//窗口類名_T("Test");
	winClass.lpszMenuName = 0;//菜單資源,沒有則設置爲NULL
	winClass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;//窗口樣式
	
	//(2)註冊Windows類
	RegisterClassExW(&winClass);//註冊Windows窗口到系統中

	//(3)創建窗口                                                                    
	g_hWnd=CreateWindowEx(
		0,
		winClass.lpszClassName,
		TEXT("Win32窗口"),  
		WS_OVERLAPPEDWINDOW, 
		300,100, //CW_USEDEFAULT(300,100)位置由系統決定
		800, 
		600, 
		NULL,
		NULL,
		hInstance,
		0);
	if (g_hWnd==0)
	{
		return 0;
	}
	g_hInstanc = hInstance;
	ShowWindow(g_hWnd, SW_SHOWNORMAL);//顯示窗口
	UpdateWindow(g_hWnd);//更新窗口
	 
	//(4)事件處理(主事件循環)
	static MSG msg = { 0 };//定義消息結構體對象,獲取消息
	while (msg.message!=WM_QUIT)//不等於退出消息
	{
		if (PeekMessage(&msg,0,0,0,PM_REMOVE))//拉取消息
		{
			TranslateMessage(&msg);//翻譯消息
			DispatchMessage(&msg);//分發消息
		}
		//遊戲邏輯
		//遊戲渲染
		//todo......
		//配置DX環境
	}

}
//消息處理函數(消息屬於那個窗口的,消息類型,消息傳過來的參數,消息傳過來的參數)
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
	switch (msg)
	{
	case WM_CLOSE://當窗口關閉時傳遞
		DestroyWindow(hwnd);
		break;
	case WM_DESTROY://當窗口關閉時銷燬
		PostQuitMessage(0);//退出主線程
		break;
	case WM_CREATE://創建窗口消息
		OutputDebugString(TEXT("窗口創建\n"));//向後臺輸出消息
		break;
	default:
		break;
	}
	//系統處理
	return DefWindowProc(hwnd,msg,wparam,lparam);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章