基于Windows的游戏,不可避免的,首先要实现一个Windows窗口
通过看书学习,Windows窗口中实现的机制是很复杂的,但代码上、步骤上还是条理清晰易懂的。即便不懂里面的机制,设计一个简单的windows窗口还是比较简单的。
我贴上自己写的(照书上打的)一个简单窗口代码:
(PS:其中有很多都没去实现,只是简单的实现一个Windows窗口。)
#include<Windows.h> #include<iostream> using namespace std; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_QUESTION); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.lpszMenuName = NULL; wc.lpszClassName = (const WCHAR*) "d3dWindow"; //注册Windows类 if (!RegisterClass(&wc)) return -1; RECT rc = { 0,0,640,480 }; AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW,false); //创建窗口 HWND hwnd = CreateWindow((const WCHAR*)"d3dWindow", L"Hello Word", WS_OVERLAPPEDWINDOW, 0, 0, rc.right-rc.left,rc.bottom-rc.top, 0, 0, hInstance, 0); //if (!hwnd) //return -1; ShowWindow(hwnd,SW_SHOWNORMAL); MSG msg = { 0 }; while (msg.message != WM_QUIT) { if (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return static_cast<int>(msg.wParam); } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; switch (message) { case WM_CHAR: break; case WM_LBUTTONDOWN: break; case WM_PAINT:; break; case WM_CLOSE: break; case WM_DESTROY: break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
编译运行,实现窗口!