Direct3D 10 Tutorial 00: Win32 Basics(Win32 基礎)

來自專欄計算機圖形學入門

導航

返回目錄

摘要

在這個預備教程中,我們將完成創建Win32應用程序所需的步驟。我們將設置一個空窗口來準備Direct3D 10。(DX11也能用啦)

源文件

(SDK root)SamplesC++Direct3D10TutorialsTutorial00

設置win32窗口

每個Windows應用程序至少需要一個窗口對象。在進入Direct3D 10(或DX11)細節之前,我們的應用程序必須有一個工作窗口對象。 這涉及三件事:

1. Register a window class. (註冊窗口類)

// Register classWNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_TUTORIAL1);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = NULL;wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_TUTORIAL1);if( !RegisterClassEx(&wcex) ) { return FALSE;}

2. 新建窗口對象。

// Create windowg_hInst = hInstance; // Store instance handle in our global variableRECT rc = { 0, 0, 640, 480 };AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );g_hWnd = CreateWindow( szWindowClass, L"Direct3D 10 Tutorial 0: Setting Up Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance, NULL);if( !g_hWnd ) return FALSE;ShowWindow( g_hWnd, nCmdShow );

3. 檢索和分發此窗口的消息。

// Main message loopMSG msg = {0};while( GetMessage( &msg, NULL, 0, 0 ) ){ TranslateMessage( &msg ); DispatchMessage( &msg );}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;}

這些是設置每個Windows應用程序所需的窗口對象所需的最小步驟。如果我們編譯並運行此代碼,我們將看到一個空白背景的窗口。


推薦閱讀:
查看原文 >>
相关文章