环境:
Windows 7x64
visualstudio 2013
Microsoft DirectXSDK (June 2010)
Tips:向云风和侯捷两位大神致敬,采取名词不翻译的方式~,自己学着开始坚持翻译,学习一下,如果能够帮到别人,那就更好啦~
每一个windows应用都需要至少一个window对象。在深入Direct3D特性之前,我们的应用需要有一个工作的window对象,包括以下几步:
1.注册一个窗口类:
//
// Register class
//
WNDCLASSEX 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.创建一个window对象
//
// Create window
//
g_hInst = hInstance; // Storeinstance handle in our global variable
RECT 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 )
returnFALSE;
ShowWindow( g_hWnd, nCmdShow );
3.检索和分发窗口消息
//
// Main message loop
//
MSG msg = {0};
while( GetMessage( &msg, NULL, 0,0 ) )
{
TranslateMessage( &msg);
DispatchMessage( &msg);
}
LRESULT CALLBACK WndProc( HWNDhWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCTps;
HDChdc;
switch(message)
{
caseWM_PAINT:
hdc= BeginPaint(hWnd, &ps);
EndPaint(hWnd,&ps);
break;
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
returnDefWindowProc(hWnd, message, wParam, lParam);
}
return0;
}
这些是建立一个window对象最小的必须步骤,对于每个应用都是一样的。编译运行,可以看到一个白色背景的窗口程序。
编码调试:
1,新建一个空项目,加入一个源文件。很多的错误。
2,CreateWindow函数不支持L"xxxx",将其替换为CreateWindowW或者将前面的L宏拿掉。
3,注册窗口不支持L字符,将其换为:WNDCLASSEXW即可.
WARNING:
编译运行成功,却发现窗口上的标题只是显示了一个字符,这跟多字节字符集有关系,因为unicode在ascii码后面补了空字符,所以解析时候解析了一个字符串之后,将其他的丢弃了。
解决方法:
将工程属性中的字符集换成unicode即可。
更改后就正常了。
编码调试:
1,新建一个空项目,加入一个源文件。很多的错误。
2,CreateWindow函数不支持L"xxxx",将其替换为CreateWindowW或者将前面的L宏拿掉。
3,注册窗口不支持L字符,将其换为:WNDCLASSEXW即可.
WARNING:
编译运行成功,却发现窗口上的标题只是显示了一个字符,这跟多字节字符集有关系,因为unicode在ascii码后面补了空字符,所以解析时候解析了一个字符串之后,将其他的丢弃了。
解决方法:
将工程属性中的字符集换成unicode即可。
更改后就正常了。