主程序代码这样的
#include "stdafx.h" #include "myd3d.h" #include "tianjie.h"
#define MAX_LOADSTRING 100
// 全局变量: HINSTANCE hInst; // 当前实例 TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 void Render(); d3dTexture a_Bk ;
// 此代码模块中包含的函数声明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{ // TODO: 在此放置代码。 MSG msg; HACCEL hAccelTable;
// 初始化全局字符串 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_TIANJIE, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance);
// 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; }
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TIANJIE);
// 主消息循环: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
return (int) msg.wParam; }
// // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // // 注释: // // 仅当希望在已添加到 Windows 95 的 // “RegisterClassEx”函数之前此代码与 Win32 系统兼容时, // 才需要此函数及其用法。调用此函数 // 十分重要,这样应用程序就可以获得关联的 // “格式正确的”小图标。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; //窗口类型 wcex.lpfnWndProc = (WNDPROC)WndProc; //窗口的消息处理函数 wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; //程序的实例句柄 wcex.hIcon = NULL; //设置窗口的图标 wcex.hCursor = LoadCursor(NULL, IDC_ARROW);//设置鼠标光标形状 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//设置窗口背景颜色 wcex.lpszMenuName = NULL; //设置窗口菜单,由于此例程不使用菜单所以设置为NULL wcex.lpszClassName = szWindowClass; //定义窗口类的名称 wcex.hIconSm = NULL;
return RegisterClassEx(&wcex); }
// // 函数: InitInstance(HANDLE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // // 在这个函数里,将按照前面所定义的窗口类别来建立并显示实际的程序窗口 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); //以上是设置窗口类的名称 //窗口的标题 //WS_OVERLAPPEDWINDOW, 窗口的风格 //CW_USEDEFAULT, 窗口的坐标X //CW_USEDEFAULT,窗口的坐标y //CW_USEDEFAULT, 窗口的宽度 //CW_USEDEFAULT,窗口的高度 //NULL, 父窗口句柄 //NULL, 窗口的菜单句柄 //hInstance, 窗口的句柄 //NULL 参数指针
if (!hWnd) { return FALSE; } //下面是创建完成窗口后Windows并没有将其显示到显示器上 //只是在内存中保存了这个窗口的全部信息,要显示这个窗口 //需要使用 ShowWindow(hwnd,iCmdShow) 函数 //这个函数有两个参数 第一个参数是用CreateWindow()函数创建窗口的时候返回的窗口句柄 //第二个参数是WinMain()函数的第三个参数 //为了保证窗口能够正常的显示到显示器上我们还要调用UpdateWindow(hwnd) 函数
MoveWindow(hWnd,0,0,1024,768,true);// 设置窗口的位置以及大小 ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);
Render();
return TRUE; }
// // 函数: WndProc(HWND, unsigned, WORD, LONG) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { //下面其中以"WM"开头的标识符是消息参数 //在WINUSER.H文件中定义 //WM_CREATE是窗口过程收到的第一个消息 //当调用CreateWindow()函数来建立窗口的时候 //窗口过程函数收到这个消息第二个消息WM_PAINT是十分重要的消息 //他负责向窗体上画东西,我们要通过它来在窗口的中央显示"HELLO"字符串 //当第一次建立窗体和需要刷新窗体的时候Windows会发送WM_PAINT消息.
switch (message) { case WM_CREATE : if( !d3dCreate( hWnd,1024,768,true )) PostMessage(hWnd,WM_CLOSE,0,0); a_Bk.Create( "2005.bmp" ); break; case WM_PAINT: // 设置窗口的重绘消息 Render(); break; case WM_DESTROY : d3dRelease(); break;; default: // 其他消息 return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
void Render() { // d3dTexture bk ;
//睲? d3dClear(D3DCOLOR_XRGB(255,255,255)); //秨﹍酶籹 d3dHdc hdc ; d3d_Device->BeginScene(); a_Bk.BltFast( 0 , 0,1024,768 ); hdc.Release(); d3d_Device->EndScene(); //Θ? d3d_Device-> resent( NULL , NULL , NULL , NULL );
} |