#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);
}