DirectX講座21回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
今回は、文字書きます(今更かよー)
デバックやパラメータ表示、ノベルゲームには必須の処理にな...
今回使うファイルは次のようになってます。どぞー(-ω-)つ旦
・&ref(direct3d.h);
・&ref(direct3d.cpp);
・&ref(font.cpp);(WinMain関数があるアプリケーション本体)
zipでほしい人はこちら
・&ref(font.zip);
文字を書くDirectXTextクラスはwinmain側にまとめてあります
direct3d.cppとdirect3d.hは前回と同じで変更はありません
font.cppは次のようになります
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS
#include <vector>
#include <Windows.h>
#include <tchar.h>
#include "direct3d.h"
////////////////////////////////////////////////
// テキスト描画クラス
class DirectXText
{
private:
ID3DXFont* pFont; // Direct3Dフォント
RECT Rect; // 描画領域
std::vector<TCHAR> Buf; // 文字列バッファ
public:
// コンストラクタ
DirectXText();
// デストラクタ
virtual ~DirectXText();
// DirectXフォント作成
bool Create(IDirect3DDevice9* pD3DDevice,int FontHeight ...
// 文字列の描画
void Draw(DWORD Color,int x,int y,const TCHAR* Str,...);
};
// コンストラクタ
DirectXText::DirectXText()
{
pFont = NULL;
}
// デストラクタ
DirectXText::~DirectXText()
{
if(pFont != NULL)
pFont->Release();
}
// DirectXフォント作成
bool DirectXText::Create(IDirect3DDevice9* pD3DDevice,in...
{
HFONT hFont = NULL; // フォントハンドル
LOGFONT LogFont ={}; // フォント構造体
// デフォルトフォント取得
hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
// デフォルトフォント情報取得
GetObject( hFont, sizeof(LOGFONT), &LogFont);
// DirectXフォント作成
if(FAILED(D3DXCreateFont(pD3DDevice,
FontHeight, // 文字高さ
LogFont.lfWidth, // 文字幅
LogFont.lfWeight, // フォントの太さ
0, // ミップマップレベル
LogFont.lfItalic, // イタリックフラグ
LogFont.lfCharSet, // 文字セット
LogFont.lfOutPrecision, // 実際のフォントと目的のフォ...
LogFont.lfQuality, // クォリティ
LogFont.lfPitchAndFamily, // ピッチとファミリインデックス
LogFont.lfFaceName, // フォント名
&pFont)))
{
return false;
}
return true;
}
// 文字列の描画
void DirectXText::Draw(DWORD Color,int x,int y,const TCH...
{
va_list args;
va_start( args, Str ); // 可変引数の最初の要素を格納...
int len = _vsctprintf( Str, args ) + 1; // 文字数カウン...
if(Buf.size() < (UINT)len)
Buf.resize(len); // 文字サイズ分動的にメモリ確保
_vstprintf( &Buf[0], Str, args ); // 文字を整形する
SetRect( &Rect, 0,0,0,0 );
// 描画領域サイズ取得
pFont->DrawText(NULL, &Buf[0], -1, &Rect, DT_LEFT | DT_C...
// 本描画
Rect.left += x;
Rect.right += x;
Rect.top += y;
Rect.bottom += y;
pFont->DrawText(NULL, &Buf[0], -1, &Rect, DT_LEFT, Color);
}
////////////////////////////////////////////////
// ウィンドウプロシージャ、ウィンドウに対するメッセージ...
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wPa...
switch(msg){
// ウィンドウが破棄されたとき
case WM_DESTROY:
PostQuitMessage(0); // WM_QUITメッセージをメッセージキ...
return 0;
}
// デフォルトのメッセージ処理を行う
return DefWindowProc(hWnd, msg, wParam, lParam);
}
// WinMain関数(アプリケーションの開始関数)
// コンソールアプリケーションと違い、コンソールを開かない
int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrev...
{
const TCHAR* WC_BASIC = _T("BASIC_WINDOW");
// シンプルウィンドウクラス設定
WNDCLASSEX wcex ={sizeof(WNDCLASSEX), CS_HREDRAW | CS_VR...
(HICON)LoadImage(NULL,MAKEINTRESOURCE(IDI_APPLICATION),...
(HCURSOR)LoadImage(NULL,MAKEINTRESOURCE(IDC_ARROW),IMAG...
(HBRUSH)GetStockObject(WHITE_BRUSH), NULL, WC_BASIC , N...
// シンプルウィンドウクラス作成
if(!RegisterClassEx(&wcex))
return false;
// ウィンドウ幅、高さはディスプレイに依存する。普通は4:3
const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;
// ウィンドウの作成
HWND hWnd = CreateWindowEx(0,WC_BASIC,
_T("Application"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDRE...
CW_USEDEFAULT,CW_USEDEFAULT,WINDOW_WIDTH,WINDOW_HEIGHT,...
////////////////////////////////////////////////////////...
////////////////////////////////////
// Direct3Dの初期化
////////////////////////////////////
Direct3D direct3d;
direct3d.Create(hWnd,WINDOW_WIDTH,WINDOW_HEIGHT);
////////////////////////////////
// フォント作成
////////////////////////////////
DirectXText text;
text.Create(direct3d.pDevice3D,32);
////////////////////////////////////////////////////////...
// メッセージループ
MSG msg = {};
while(msg.message != WM_QUIT) {
// アプリケーションに送られてくるメッセージをメッセージ...
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
DispatchMessage(&msg); // アプリケーションの各ウィンド...
}
// メッセージ処理をしていないとき
else{
//(ここにDirectXの処理を書く)
////////////////////////////////////////////////////////...
// 描画開始
if(SUCCEEDED(direct3d.pDevice3D->BeginScene()))
{
DWORD ClearColor = 0xff808080; // 背景クリア色
// 背景クリア
direct3d.pDevice3D->Clear( 0, NULL, D3DCLEAR_TARGET |...
// 文字描画
text.Draw(0xffff0000,0,0,_T("Hello DirectX \n"));
// 描画終了
direct3d.pDevice3D->EndScene();
}
// 描画反映
direct3d.pDevice3D->Present( NULL, NULL, NULL, NULL );
////////////////////////////////////////////////////////...
}
}
return 0;
}
実行結果は次のようになります
文字が書かれているはずです
&ref(font.jpg);
前:DirectX講座20回
次:DirectX講座22回
| ミッションコンプリートセカンド|1|
|またお前か|1|
|またおm・・・誰だおまえは!?[|6|
終了行:
今回は、文字書きます(今更かよー)
デバックやパラメータ表示、ノベルゲームには必須の処理にな...
今回使うファイルは次のようになってます。どぞー(-ω-)つ旦
・&ref(direct3d.h);
・&ref(direct3d.cpp);
・&ref(font.cpp);(WinMain関数があるアプリケーション本体)
zipでほしい人はこちら
・&ref(font.zip);
文字を書くDirectXTextクラスはwinmain側にまとめてあります
direct3d.cppとdirect3d.hは前回と同じで変更はありません
font.cppは次のようになります
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NON_CONFORMING_SWPRINTFS
#include <vector>
#include <Windows.h>
#include <tchar.h>
#include "direct3d.h"
////////////////////////////////////////////////
// テキスト描画クラス
class DirectXText
{
private:
ID3DXFont* pFont; // Direct3Dフォント
RECT Rect; // 描画領域
std::vector<TCHAR> Buf; // 文字列バッファ
public:
// コンストラクタ
DirectXText();
// デストラクタ
virtual ~DirectXText();
// DirectXフォント作成
bool Create(IDirect3DDevice9* pD3DDevice,int FontHeight ...
// 文字列の描画
void Draw(DWORD Color,int x,int y,const TCHAR* Str,...);
};
// コンストラクタ
DirectXText::DirectXText()
{
pFont = NULL;
}
// デストラクタ
DirectXText::~DirectXText()
{
if(pFont != NULL)
pFont->Release();
}
// DirectXフォント作成
bool DirectXText::Create(IDirect3DDevice9* pD3DDevice,in...
{
HFONT hFont = NULL; // フォントハンドル
LOGFONT LogFont ={}; // フォント構造体
// デフォルトフォント取得
hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
// デフォルトフォント情報取得
GetObject( hFont, sizeof(LOGFONT), &LogFont);
// DirectXフォント作成
if(FAILED(D3DXCreateFont(pD3DDevice,
FontHeight, // 文字高さ
LogFont.lfWidth, // 文字幅
LogFont.lfWeight, // フォントの太さ
0, // ミップマップレベル
LogFont.lfItalic, // イタリックフラグ
LogFont.lfCharSet, // 文字セット
LogFont.lfOutPrecision, // 実際のフォントと目的のフォ...
LogFont.lfQuality, // クォリティ
LogFont.lfPitchAndFamily, // ピッチとファミリインデックス
LogFont.lfFaceName, // フォント名
&pFont)))
{
return false;
}
return true;
}
// 文字列の描画
void DirectXText::Draw(DWORD Color,int x,int y,const TCH...
{
va_list args;
va_start( args, Str ); // 可変引数の最初の要素を格納...
int len = _vsctprintf( Str, args ) + 1; // 文字数カウン...
if(Buf.size() < (UINT)len)
Buf.resize(len); // 文字サイズ分動的にメモリ確保
_vstprintf( &Buf[0], Str, args ); // 文字を整形する
SetRect( &Rect, 0,0,0,0 );
// 描画領域サイズ取得
pFont->DrawText(NULL, &Buf[0], -1, &Rect, DT_LEFT | DT_C...
// 本描画
Rect.left += x;
Rect.right += x;
Rect.top += y;
Rect.bottom += y;
pFont->DrawText(NULL, &Buf[0], -1, &Rect, DT_LEFT, Color);
}
////////////////////////////////////////////////
// ウィンドウプロシージャ、ウィンドウに対するメッセージ...
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wPa...
switch(msg){
// ウィンドウが破棄されたとき
case WM_DESTROY:
PostQuitMessage(0); // WM_QUITメッセージをメッセージキ...
return 0;
}
// デフォルトのメッセージ処理を行う
return DefWindowProc(hWnd, msg, wParam, lParam);
}
// WinMain関数(アプリケーションの開始関数)
// コンソールアプリケーションと違い、コンソールを開かない
int _stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrev...
{
const TCHAR* WC_BASIC = _T("BASIC_WINDOW");
// シンプルウィンドウクラス設定
WNDCLASSEX wcex ={sizeof(WNDCLASSEX), CS_HREDRAW | CS_VR...
(HICON)LoadImage(NULL,MAKEINTRESOURCE(IDI_APPLICATION),...
(HCURSOR)LoadImage(NULL,MAKEINTRESOURCE(IDC_ARROW),IMAG...
(HBRUSH)GetStockObject(WHITE_BRUSH), NULL, WC_BASIC , N...
// シンプルウィンドウクラス作成
if(!RegisterClassEx(&wcex))
return false;
// ウィンドウ幅、高さはディスプレイに依存する。普通は4:3
const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;
// ウィンドウの作成
HWND hWnd = CreateWindowEx(0,WC_BASIC,
_T("Application"), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDRE...
CW_USEDEFAULT,CW_USEDEFAULT,WINDOW_WIDTH,WINDOW_HEIGHT,...
////////////////////////////////////////////////////////...
////////////////////////////////////
// Direct3Dの初期化
////////////////////////////////////
Direct3D direct3d;
direct3d.Create(hWnd,WINDOW_WIDTH,WINDOW_HEIGHT);
////////////////////////////////
// フォント作成
////////////////////////////////
DirectXText text;
text.Create(direct3d.pDevice3D,32);
////////////////////////////////////////////////////////...
// メッセージループ
MSG msg = {};
while(msg.message != WM_QUIT) {
// アプリケーションに送られてくるメッセージをメッセージ...
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
DispatchMessage(&msg); // アプリケーションの各ウィンド...
}
// メッセージ処理をしていないとき
else{
//(ここにDirectXの処理を書く)
////////////////////////////////////////////////////////...
// 描画開始
if(SUCCEEDED(direct3d.pDevice3D->BeginScene()))
{
DWORD ClearColor = 0xff808080; // 背景クリア色
// 背景クリア
direct3d.pDevice3D->Clear( 0, NULL, D3DCLEAR_TARGET |...
// 文字描画
text.Draw(0xffff0000,0,0,_T("Hello DirectX \n"));
// 描画終了
direct3d.pDevice3D->EndScene();
}
// 描画反映
direct3d.pDevice3D->Present( NULL, NULL, NULL, NULL );
////////////////////////////////////////////////////////...
}
}
return 0;
}
実行結果は次のようになります
文字が書かれているはずです
&ref(font.jpg);
前:DirectX講座20回
次:DirectX講座22回
| ミッションコンプリートセカンド|1|
|またお前か|1|
|またおm・・・誰だおまえは!?[|6|
ページ名: