如题,英文显示正常,中文为乱码,求解。代码如下//////////////////////////////////////////////////////////////////////////
//Add head file
//////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <d3d9.h>
#include <d3dx9core.h>//////////////////////////////////////////////////////////////////////////
//Global variable
//////////////////////////////////////////////////////////////////////////
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pD3DDevice = NULL;
LPD3DXFONT g_pFont = 0;
char* strText = "Welcome DirectX 9!中国";
RECT clientRect;//////////////////////////////////////////////////////////////////////////
struct sCustomVertex {
float x, y, z, rhw;
DWORD color;
};//描述FVF和保存顶点的结构数组
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
//#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) sCustomVertex vertices[] =
{
{100.0f, 400.0f, 1.0f, 1.0f, 0xffffffff},
{300.0f, 50.0f , 1.0f, 1.0f, 0xff00ff00},
{500.0f, 400.0f, 1.0f, 1.0f, 0xffff00ff}
};//////////////////////////////////////////////////////////////////////////
HRESULT InitD3D(HWND hWnd)
{
//创建D3D3对象, 该对象用来创建D3D设备对象
if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
{
MessageBox(NULL, "Create D3D Fail!", "Error", MB_OK);
return false;
}
//设置D3DPRESENT_PARAMETERS 结构, 准备创建D3D设备对象
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
//创建Direct3D设备对象
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice)))
return false; //创建字体
if(FAILED(D3DXCreateFont(g_pD3DDevice, 0, 0, 400, 0, TRUE, ANSI_CHARSET, OUT_TT_ONLY_PRECIS,
DEFAULT_QUALITY, 0, "Arail", &g_pFont)))
return false; //获取客户区
GetClientRect(hWnd, &clientRect);
//创建静态顶点缓存
IDirect3DVertexBuffer9* g_vertex_buffer;
g_pD3DDevice->CreateVertexBuffer(sizeof(vertices), 0, D3DFVF_XYZ,
D3DPOOL_MANAGED, &g_vertex_buffer, 0);
//访问顶点缓存
void *pVertices;
g_vertex_buffer->Lock(0, sizeof(vertices), (void **)&pVertices, 0);
memcpy(pVertices, vertices, sizeof(vertices));
g_vertex_buffer->Unlock();
return true;
}//////////////////////////////////////////////////////////////////////////
void Render()
{
//清空后台缓存
g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0); //开始在后台缓存绘制图形
if( SUCCEEDED(g_pD3DDevice->BeginScene()))
{
//在此在后台缓存绘制图形
g_pFont->DrawText(NULL, strText, -1, &clientRect, DT_SINGLELINE | DT_NOCLIP |
DT_VCENTER, 0xffffffff); //使用顶点缓存绘制图形
// g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);
//在此在后台缓存渲染图形 g_pD3DDevice->EndScene();
} //将在后台缓存绘制的图形提交到前台缓存显示
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
}//////////////////////////////////////////////////////////////////////////
//释放创建对象
//////////////////////////////////////////////////////////////////////////
void CleanUp()
{
//释放Direct3D 设备对象
if(g_pD3DDevice != NULL)
{
g_pD3DDevice->Release();
} //释放Direct3D对象
if(g_pD3D != NULL)
{
g_pD3D->Release();
} //释放字体对象
if(g_pFont != NULL)
{
g_pFont->Release();
}
}//////////////////////////////////////////////////////////////////////////
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
CleanUp();
PostQuitMessage(0);
return 0;
case WM_PAINT:
Render();
ValidateRect(hWnd, NULL);
return 0; case WM_KEYUP:
if(wParam == VK_ESCAPE)
{
CleanUp();
PostQuitMessage(0);
}
break;
} return DefWindowProc(hWnd, msg, wParam, lParam);
}
//////////////////////////////////////////////////////////////////////////
//MAIN
//////////////////////////////////////////////////////////////////////////
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
//注册窗口
WNDCLASSEX wndclass = {sizeof(WNDCLASSEX), CS_CLASSDC, (WNDPROC)MsgProc, 0L, 0L,
hInst, NULL, NULL, NULL, NULL, "ClassName", NULL}; RegisterClassEx(&wndclass); //创建窗口
HWND hWnd = CreateWindow("ClassName", "DirectX9 游戏编程第三章", WS_OVERLAPPEDWINDOW,
200, 100, 600, 500, NULL, NULL, wndclass.hInstance, NULL); if(hWnd == NULL)
{
return 0;
} //初始化Direct 3D
if(SUCCEEDED(InitD3D(hWnd)))
{
//显示窗口
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd); //进入消息循环
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
} UnregisterClass("ClassName", wndclass.hInstance);
return 0;
}
//Add head file
//////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <d3d9.h>
#include <d3dx9core.h>//////////////////////////////////////////////////////////////////////////
//Global variable
//////////////////////////////////////////////////////////////////////////
LPDIRECT3D9 g_pD3D = NULL;
LPDIRECT3DDEVICE9 g_pD3DDevice = NULL;
LPD3DXFONT g_pFont = 0;
char* strText = "Welcome DirectX 9!中国";
RECT clientRect;//////////////////////////////////////////////////////////////////////////
struct sCustomVertex {
float x, y, z, rhw;
DWORD color;
};//描述FVF和保存顶点的结构数组
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
//#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) sCustomVertex vertices[] =
{
{100.0f, 400.0f, 1.0f, 1.0f, 0xffffffff},
{300.0f, 50.0f , 1.0f, 1.0f, 0xff00ff00},
{500.0f, 400.0f, 1.0f, 1.0f, 0xffff00ff}
};//////////////////////////////////////////////////////////////////////////
HRESULT InitD3D(HWND hWnd)
{
//创建D3D3对象, 该对象用来创建D3D设备对象
if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
{
MessageBox(NULL, "Create D3D Fail!", "Error", MB_OK);
return false;
}
//设置D3DPRESENT_PARAMETERS 结构, 准备创建D3D设备对象
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = true;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
//创建Direct3D设备对象
if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice)))
return false; //创建字体
if(FAILED(D3DXCreateFont(g_pD3DDevice, 0, 0, 400, 0, TRUE, ANSI_CHARSET, OUT_TT_ONLY_PRECIS,
DEFAULT_QUALITY, 0, "Arail", &g_pFont)))
return false; //获取客户区
GetClientRect(hWnd, &clientRect);
//创建静态顶点缓存
IDirect3DVertexBuffer9* g_vertex_buffer;
g_pD3DDevice->CreateVertexBuffer(sizeof(vertices), 0, D3DFVF_XYZ,
D3DPOOL_MANAGED, &g_vertex_buffer, 0);
//访问顶点缓存
void *pVertices;
g_vertex_buffer->Lock(0, sizeof(vertices), (void **)&pVertices, 0);
memcpy(pVertices, vertices, sizeof(vertices));
g_vertex_buffer->Unlock();
return true;
}//////////////////////////////////////////////////////////////////////////
void Render()
{
//清空后台缓存
g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(45, 50, 170), 1.0f, 0); //开始在后台缓存绘制图形
if( SUCCEEDED(g_pD3DDevice->BeginScene()))
{
//在此在后台缓存绘制图形
g_pFont->DrawText(NULL, strText, -1, &clientRect, DT_SINGLELINE | DT_NOCLIP |
DT_VCENTER, 0xffffffff); //使用顶点缓存绘制图形
// g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 4);
//在此在后台缓存渲染图形 g_pD3DDevice->EndScene();
} //将在后台缓存绘制的图形提交到前台缓存显示
g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
}//////////////////////////////////////////////////////////////////////////
//释放创建对象
//////////////////////////////////////////////////////////////////////////
void CleanUp()
{
//释放Direct3D 设备对象
if(g_pD3DDevice != NULL)
{
g_pD3DDevice->Release();
} //释放Direct3D对象
if(g_pD3D != NULL)
{
g_pD3D->Release();
} //释放字体对象
if(g_pFont != NULL)
{
g_pFont->Release();
}
}//////////////////////////////////////////////////////////////////////////
LRESULT WINAPI MsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_DESTROY:
CleanUp();
PostQuitMessage(0);
return 0;
case WM_PAINT:
Render();
ValidateRect(hWnd, NULL);
return 0; case WM_KEYUP:
if(wParam == VK_ESCAPE)
{
CleanUp();
PostQuitMessage(0);
}
break;
} return DefWindowProc(hWnd, msg, wParam, lParam);
}
//////////////////////////////////////////////////////////////////////////
//MAIN
//////////////////////////////////////////////////////////////////////////
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
{
//注册窗口
WNDCLASSEX wndclass = {sizeof(WNDCLASSEX), CS_CLASSDC, (WNDPROC)MsgProc, 0L, 0L,
hInst, NULL, NULL, NULL, NULL, "ClassName", NULL}; RegisterClassEx(&wndclass); //创建窗口
HWND hWnd = CreateWindow("ClassName", "DirectX9 游戏编程第三章", WS_OVERLAPPEDWINDOW,
200, 100, 600, 500, NULL, NULL, wndclass.hInstance, NULL); if(hWnd == NULL)
{
return 0;
} //初始化Direct 3D
if(SUCCEEDED(InitD3D(hWnd)))
{
//显示窗口
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd); //进入消息循环
MSG msg;
ZeroMemory(&msg, sizeof(msg));
while(msg.message != WM_QUIT)
{
if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render();
}
}
} UnregisterClass("ClassName", wndclass.hInstance);
return 0;
}
解决方案 »
- 支持MFC的ATL工程添加ATL控件后无法注册
- ole拖拽问题
- 非模态对话框在PostNcDestroy()中delete this报错
- 请高手们给个思路,迷茫阿!
- 怎样设置CListCtrl每个Item、SubItem的颜色?
- 请问怎么自动拨号啊?
- vc里更改编辑编辑框内容的函数是什么?
- 在创建MFC DLL时如何输出函数或类???
- 什么函数可以把CString的两个字符串连接在一起
- 如何判断是否有结果集返回(ADO问题)
- vector容器的find的用法
- 急急急!!error C2228: left of '.ReplaceSel' must have class/struct/union type急求解决,谢谢
2.在opengl里面就用系统的DC来显示汉字在一个缓存上,然后DrawPixels
error C2664: 'DrawTextA' : cannot convert parameter 2 from 'unsigned short *' to 'const char *'
先定义成宽字符,再转为多字节,再调用函数显示,用WideCharToMultiByte转换不知道可以不,我没整过,可以的话,回帖告诉我一声