忍者ブログ
僕の厨二病が垣間見えるただ1つのウェブログ。 設置H22/2/21
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ちわっす、年末に欲しかった本を一気に買って読みきれずに積んでるよっしーです。
今日もスマブラ練習してました。元気です。

では早速、第2回やりますw





今回は、Windowsの画面を出すとこまで。

よってDirectXは一切でてきません。



~ やり方 ~

1,VC開いて、新しいプロジェクト作る。(空のプロジェクトから作るよ!)

2,WinMain.cppっていう名前でソースファイルを作る。

3,プロジェクトのプロパティから文字セットを設定
文字コードは何がいいのかぐぐったけど良く解らんかったので、
安定のマルチバイトにしときました。(てかデフォルトがマルチバイトになってた。)

4,[C/C++]→[コード生成]でランタイムライブラリをDLLじゃないやつに直す。
マルチスレッドデバッグDLL→マルチスレッドデバッグって感じ。

5,WindowsプログラミングのソースをWinMain.cppに書く。
1番下のソースをコピペ。


とりあえず、これでなんか動く!w

こんな感じ。
524a7448.png













ここで、一言。

むしろ本題。


みなさんコピペしてますか?


理解するために真似して自分で打ってみよう。とかアホな事考えてませんか?

断言しましょう。それは時間の無駄です。

学校の先生にコピペすんなと言われようが、自分で本買って勉強してようが、
サンプルをコピー出来るならそれで。

まずは、全体を見て分かりそうなとこちょっといじってみる。

そこから徐々に「コレなんやねん?」してけばいい。


そもそもプログラムなんて、時間をかければ誰だってできる、

いかに、サボれるとこサボるかの戦いですし。

コピペしましょう。

おわり。




次回からは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
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール
HN:
よっしー
性別:
男性
職業:
ゲームプログラマー
趣味:
アニメ、スポーツ
自己紹介:
好きなことを全力でしようと思ってます。ツイッター(@LaxG9)
最新のツイート
最新CM
[12/04 よっしー]
[12/04 まめ組Tさん]
[11/29 ふぁ]
[10/04 よっしー]
[10/02 コーラ]
リンク
カウンター
ブログ内検索
アクセス解析
忍者ブログ [PR]