僕の厨二病が垣間見えるただ1つのウェブログ。 設置H22/2/21
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ちわっす、年末に欲しかった本を一気に買って読みきれずに積んでるよっしーです。
今日もスマブラ練習してました。元気です。
では早速、第2回やりますw
今日もスマブラ練習してました。元気です。
では早速、第2回やりますw
今回は、Windowsの画面を出すとこまで。
よってDirectXは一切でてきません。
~ やり方 ~
1,VC開いて、新しいプロジェクト作る。(空のプロジェクトから作るよ!)
2,WinMain.cppっていう名前でソースファイルを作る。
3,プロジェクトのプロパティから文字セットを設定
文字コードは何がいいのかぐぐったけど良く解らんかったので、
安定のマルチバイトにしときました。(てかデフォルトがマルチバイトになってた。)
4,[C/C++]→[コード生成]でランタイムライブラリをDLLじゃないやつに直す。
マルチスレッドデバッグDLL→マルチスレッドデバッグって感じ。
5,WindowsプログラミングのソースをWinMain.cppに書く。
1番下のソースをコピペ。
とりあえず、これでなんか動く!w
こんな感じ。
ここで、一言。
むしろ本題。
みなさんコピペしてますか?
理解するために真似して自分で打ってみよう。とかアホな事考えてませんか?
断言しましょう。それは時間の無駄です。
学校の先生にコピペすんなと言われようが、自分で本買って勉強してようが、
サンプルをコピー出来るならそれで。
まずは、全体を見て分かりそうなとこちょっといじってみる。
そこから徐々に「コレなんやねん?」してけばいい。
そもそもプログラムなんて、時間をかければ誰だってできる、
いかに、サボれるとこサボるかの戦いですし。
コピペしましょう。
おわり。
次回からはDirectX細かい話していこう。
正直、この記事書くために実際の作業の何倍も使ってるw
俺のブログなんかよりこの辺参考にするといいよ。
計算技術研究会のページ k3tec.net/neko_wiki/index.php
TWIN TAIL LOVERS.(仮) www.twin-tail.jp/wiki/index.php
下のソースをWinMain.cppに貼っつければおk。
コメントアウトの部分はDirectX9のフレームワーク作ったときの。
そこにDirectX11の相当処理をいれちゃえ的なw
かなりヤッツケだから、コレ使うなら自分で設計し直してw
カプセル化万歳。
//==========================================
// 参考ソース:WinMain.cpp
//==========================================
#include <Windows.h>
//--------------------------------------------------------------
// 便利マクロ
//--------------------------------------------------------------
#define SAFE_DELETE_ARRAY(p) { if(p){ delete[] (p); (p)=NULL; } }
#define SAFE_DELETE(p) { if(p){ delete (p); (p)=NULL; } }
#define SAFE_RELEASE(p) { if(p){ (p)->Release(); (p)=NULL; } }
#define ERROR_MESSAGE(t) MessageBox(NULL, t, WIN_ERROR, MB_OK)
#define PI (3.141592654f) //PIの値を得る
#define TORADIAN(d) ((d)*(PI/180.0f)) //度数を弧度に変換する
#define FRAMETIME (1.0f/60.0f) //1フレームの時間(秒)
#define GETRAND(r) ((r)<=0 ? 0:rand()%(r)) //int型の乱数を得る
//--------------------------------------------------------------
// ウインドウの設定
//--------------------------------------------------------------
#define WIN_TITLE "DirectX11やるぞー!" //ウインドウのタイトル
#define WIN_CLASSNAME "WindowClass" //ウインドウクラス名
#define WIN_ERROR "エラー!!" //エラー表示
#define WIN_STYLE (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX) //ウインドウのスタイル
#define CLIENT_WIDTH (640) //クライアント領域の幅
#define CLIENT_HEIGHT (480) //クライアント領域の高さ
HANDLE g_hMutex = NULL; //ミューテックス
HWND g_hWnd = NULL; //ウインドウハンドル
bool g_bFullScreen = false; //フルスクリーンのときtrue
//--------------------------------------------------------------
// ウインドウプロシージャ
//--------------------------------------------------------------
LRESULT CALLBACK MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0); //WM_QUITを送出
break;
case WM_KEYDOWN:
//Escボタンが押されたら
if(wParam == VK_ESCAPE)
PostQuitMessage(0); //WM_QUITを送出
break;
default:
return DefWindowProc( hWnd, msg, wParam, lParam );
}
return 0L;
}
//--------------------------------------------------------------
// ウインドウの初期化
//--------------------------------------------------------------
HRESULT InitWindow( void )
{
//ミューテックスを利用し多重起動を防ぐ
g_hMutex = CreateMutex( NULL, FALSE, WIN_TITLE );
if( GetLastError() == ERROR_ALREADY_EXISTS )
{
ERROR_MESSAGE("すでに同名のアプリケーションが起動しています。");
if(g_hMutex) CloseHandle(g_hMutex); //ミューテックスの解放
return E_FAIL;
}
#ifdef G9_FULLSCREEN
//ウインドウのモードを尋ねる
int flag = MessageBox( NULL,
_T("フルスクリーンで起動しますか?"),
WIN_TITLE,
MB_YESNO | MB_ICONQUESTION );
if( flag == IDYES ) g_bFullScreen = true;
else g_bFullScreen = false;
#endif
//ウインドウクラスを登録
WNDCLASSEX wc = {
sizeof(WNDCLASSEX), //構造体のサイズ
CS_CLASSDC, //専用のコンテキストを利用
MsgProc, //プロシージャのアドレス
0L,0L, //追加メモリ
GetModuleHandle(NULL), //クラスのインスタンスハンドルを作成
NULL, //アイコンのハンドル
NULL, //カーソルのハンドル
NULL, //背景用ブラシのハンドル
NULL, //メニューリソース名
WIN_CLASSNAME, //ウインドウクラス名
NULL //小アイコンのハンドル
};
RegisterClassEx( &wc );
//クライアント領域のサイズを設定
RECT rect = {0, 0, CLIENT_WIDTH, CLIENT_HEIGHT};
AdjustWindowRect(&rect, WIN_STYLE, FALSE);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
//ウインドウの生成
g_hWnd = CreateWindow( WIN_CLASSNAME, WIN_TITLE, WIN_STYLE,
CW_USEDEFAULT, CW_USEDEFAULT, width, height,
NULL, NULL, wc.hInstance, NULL );
//if(FAILED( gCDirect3D->Init() ) ) //Direct3Dの初期化
// return E_FAIL;
//if(FAILED( gCDInput->Init(g_hWnd, wc.hInstance) ) ) //DirectInputの初期化
// return E_FAIL;
//if(FAILED( gCDSound->Init(g_hWnd) ) ) //DirectSoundの初期化
// return E_FAIL;
ShowWindow( g_hWnd, SW_SHOWDEFAULT ); //ウインドウを表示
SetCursor( NULL ); //マウスカーソルを隠す
//srand( timeGetTime() ); //乱数の種を初期化
return S_OK;
}
//--------------------------------------------------------------
// ウインドウの終了処理
//--------------------------------------------------------------
void EndWindow( void )
{
//クラスのインスタンスを解放
//SAFE_DELETE(gCDSound);
//SAFE_DELETE(gCDInput);
//SAFE_DELETE(gCMesh);
//SAFE_DELETE(gCAnimMesh);
//SAFE_DELETE(gCMessage);
//SAFE_DELETE(gCBillboard)
//SAFE_DELETE(gCTexture);
//SAFE_DELETE(gCCamera);
//SAFE_DELETE(gCDirect3D);
UnregisterClass( WIN_CLASSNAME, GetModuleHandle(NULL) ); //ウインドウクラスの登録を解除
if(g_hMutex) CloseHandle(g_hMutex); //ミューテックスの解放
}
//--------------------------------------------------------------
// WinMain関数(エントリポイント)
//--------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPInst, LPSTR lpCmd, int nCmd )
{
MSG msg;
ZeroMemory( &msg, sizeof(MSG) ); //msgを0で初期化
// Screen *CScreen = new Screen(); //Screenクラスのインスタンスの生成
//ウインドウの初期化
if( FAILED(InitWindow()))
{
ERROR_MESSAGE("ウインドウの初期化に失敗しました");
goto EXIT;
}
// && SUCCEEDED(CScreen->Init()) ) //ゲームの初期化
//WM_QUITを得るまでループ
while( msg.message != WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) //メッセージ取得
{
TranslateMessage( &msg ); //メッセージの解読
DispatchMessage( &msg ); //プロシージャに転送
}
else
{
//ウインドウの状態を確認
WINDOWPLACEMENT wndpl;
GetWindowPlacement( g_hWnd, &wndpl );
if( wndpl.showCmd != SW_HIDE
&& wndpl.showCmd != SW_MINIMIZE
&& wndpl.showCmd != SW_SHOWMINIMIZED
&& wndpl.showCmd != SW_SHOWMINNOACTIVE )
{
// if( g_bFullScreen ) SetCursor(NULL); //フルスクリーンのときカーソルを隠す
// if( FAILED(CScreen->Main()) ) break; //メインルーチン
}
}
}
EXIT:
// CScreen->End(); //ゲームの終了処理
// SAFE_DELETE(CScreen); //Screenクラスを削除
EndWindow(); //終了処理
return S_OK; //正常終了
}
PR
この記事にコメントする
カレンダー
プロフィール
HN:
よっしー
性別:
男性
職業:
ゲームプログラマー
趣味:
アニメ、スポーツ
自己紹介:
好きなことを全力でしようと思ってます。ツイッター(@LaxG9)
カテゴリー
最新のツイート
最新記事
(02/09)
(11/06)
(05/03)
(05/23)
(04/09)
リンク
カウンター
ブログ内検索
アクセス解析