#include <windows.h>
HINSTANCE hInst;
HWND wndHandle;
bool initWindow(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)
{
// 初始化窗口
if (!initWindow(hInstance))
return false;
// 主消息循环
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while(msg.message!=WM_QUIT)
{
while(GetMessage(&msg,wndHandle, 0, 0))
{
TranslateMessage(&msg); // 转换消息
DispatchMessage(&msg); // 投递消息
}
}
return ( int)msg.wParam;
}
bool initWindow(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
// 此部分可查看MSDN
wcex.cbSize = sizeof(WNDCLASSEX); // 这个structure的大小
wcex.style =CS_HREDRAW | CS_VREDRAW; // 类型
wcex.lpfnWndProc =(WNDPROC)WndProc; // 处理程序消息的函数 (重点)
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance =hInstance; // 这个程序的句柄
wcex.hIcon = 0; // 程序的ICON
wcex.hCursor =LoadCursor(NULL,IDC_ARROW); // 鼠标指针
wcex.hbrBackground =(HBRUSH)(COLOR_WINDOW+ 1); // 程序背景色,(这里有个强制类型转换,不明白可以看孙鑫老师的程序)
wcex.lpszMenuName =NULL; // 没有菜单
wcex.lpszClassName = " Direct Example "; // 程序注册名称(这里一定和下面的名称一至)
wcex.hIconSm = 0; //
RegisterClassEx(&wcex); // 注册
// 创建窗口
wndHandle=CreateWindow(
" Direct Example ", // 这里一定和上面注册名称一样
" 我的D3D程序 ", // 标题名称
WS_OVERLAPPEDWINDOW, // 窗口类型
CW_USEDEFAULT, // X坐标
CW_USEDEFAULT, // Y坐标
640, // 窗口宽度
480, // 窗口高度
NULL, // 没有父窗口
NULL, // 没有菜单
hInstance, // 程序的句柄
NULL);
// 对窗口是否已经创建成功进行确认
if (!wndHandle)
return false;
// 在屏幕上显示这个窗口
ShowWindow(wndHandle,SW_SHOW);
UpdateWindow(wndHandle);
return true;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
// 检查消息队列中所有可用消息
switch(message)
{
case WM_DESTROY:
PostQuitMessage( 0);
break;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}
HINSTANCE hInst;
HWND wndHandle;
bool initWindow(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)
{
// 初始化窗口
if (!initWindow(hInstance))
return false;
// 主消息循环
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while(msg.message!=WM_QUIT)
{
while(GetMessage(&msg,wndHandle, 0, 0))
{
TranslateMessage(&msg); // 转换消息
DispatchMessage(&msg); // 投递消息
}
}
return ( int)msg.wParam;
}
bool initWindow(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
// 此部分可查看MSDN
wcex.cbSize = sizeof(WNDCLASSEX); // 这个structure的大小
wcex.style =CS_HREDRAW | CS_VREDRAW; // 类型
wcex.lpfnWndProc =(WNDPROC)WndProc; // 处理程序消息的函数 (重点)
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance =hInstance; // 这个程序的句柄
wcex.hIcon = 0; // 程序的ICON
wcex.hCursor =LoadCursor(NULL,IDC_ARROW); // 鼠标指针
wcex.hbrBackground =(HBRUSH)(COLOR_WINDOW+ 1); // 程序背景色,(这里有个强制类型转换,不明白可以看孙鑫老师的程序)
wcex.lpszMenuName =NULL; // 没有菜单
wcex.lpszClassName = " Direct Example "; // 程序注册名称(这里一定和下面的名称一至)
wcex.hIconSm = 0; //
RegisterClassEx(&wcex); // 注册
// 创建窗口
wndHandle=CreateWindow(
" Direct Example ", // 这里一定和上面注册名称一样
" 我的D3D程序 ", // 标题名称
WS_OVERLAPPEDWINDOW, // 窗口类型
CW_USEDEFAULT, // X坐标
CW_USEDEFAULT, // Y坐标
640, // 窗口宽度
480, // 窗口高度
NULL, // 没有父窗口
NULL, // 没有菜单
hInstance, // 程序的句柄
NULL);
// 对窗口是否已经创建成功进行确认
if (!wndHandle)
return false;
// 在屏幕上显示这个窗口
ShowWindow(wndHandle,SW_SHOW);
UpdateWindow(wndHandle);
return true;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
// 检查消息队列中所有可用消息
switch(message)
{
case WM_DESTROY:
PostQuitMessage( 0);
break;
}
return DefWindowProc(hWnd,message,wParam,lParam);
}