忘れる前に覚書。優しい文章を目指します。
ザ・覚書 ザ・覚書
出来るだけ子供にも、わかりやすいように書いて行きたいと思います。

PCバージョンでサイトを表示しています。
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?
ザ・覚書のトップページに戻る今のページの関連ページのリストへ

C言語 とにかく自力でウィンドウ

☆C言語 とにかく自力でウィンドウ

下は、OS Windowsの場合です。

とにかくウィンドウを手書きで自作したい場合、VCではこんな感じに書きます。
メッセージプロシージャに処理したいメッセージを書いていけば色々遊べます。

(VBやDelpaiやC++Builderは、簡単にウィンドウが出来て 処理も書けるので便利かもしれませんが、
その作り方に従わないといけないので自由度にかけます。
メッセージの仕組みもよくわかりませんし。APIも使いにくいです。
正直、書いてて面白くないです。
よって遊ぶなら、これをベースが一番楽しいです。わたしは。
これならWindowsAPIも直書き出来るんですよ。
個人の意見です)



//ウィンドウの作成
#include <windows.h>

//WINDOWSでは、同じアプリケーションを複数起動できるため、
//複数実行する場合はアプリケーションのコピーを実行。
//このコピーのことをインスタンスという。

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
char szClassNme[] = "ウィンドウクラス・ネーム";

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
                   LPSTR lpszCmdLine, int nCmdShow)
{
    HWND hWnd;
    MSG msg;
    WNDCLASS myProg;

    // インスタンスハンドルを調べ、初回起動の時に限ってウィンドウの外観を定義する。
    if (!hPreInst) {
        myProg.style            =CS_HREDRAW | CS_VREDRAW;     // 条件のサイズ変更があったら全体を描き直す
                                //CS_HREDRAW(水平方向のサイズ変更があったら全体を描き直す)、CS_VREDRAW(垂直方向のサイズ変更で全体を描き直す)
        myProg.lpfnWndProc      =WndProc;                     // ウィンドウプロシージャの名前
        myProg.cbClsExtra       =0;                           // メモリ領域の追加設定・普通は0
        myProg.cbWndExtra       =0;                           // メモリ領域の追加設定・普通は0
        myProg.hInstance        =hInstance;                   // インスタンスを登録
        myProg.hIcon            =NULL;                        // ウィンドウクラスにアイコンを登録
        myProg.hCursor          =LoadCursor(NULL, IDC_ARROW); // ウィンドウクラスにカーソルを登録
        myProg.hbrBackground    =(HBRUSH)GetStockObject(WHITE_BRUSH); // 背景を登録
        myProg.lpszMenuName     =NULL;                        // メニューの名前を登録
        myProg.lpszClassName    =szClassNme;                  // クラス名を登録
        if (!RegisterClass(&myProg))
            return FALSE;
    }

    // ウィンドウを作る(hWnd は  ウィンドウのハンドル)
    hWnd = CreateWindow(szClassNme,   // クラス名
        "ウィンドウ表示プログラミング", // ウィンドウタイトル
        WS_OVERLAPPEDWINDOW,          // ウィンドウスタイル
        CW_USEDEFAULT,                // X座標
        CW_USEDEFAULT,                // Y座標
        CW_USEDEFAULT,                // ウィンドウの横幅
        CW_USEDEFAULT,                // ウィンドウの高さ
        NULL,                         // 親ウィンドウハンドル、子供ウィンドウを作るとき必要(親を作るときはNULL)
        NULL,                         // メニューハンドル(クラスメニューの時はNULL)
                                      // (クラスメニューというのは、WNDCLASSに登録されたメニュー)
        hInstance,                    // インスタンスハンドル
        NULL);                        // ウィンドウ作成データ(NULLにしておく)
    
    ShowWindow(hWnd, nCmdShow);       // 画面上にどのように表示するか
                                      // 第2引数:SW_SHOW(位置、大きさをそのままで)
                                      //          SW_SHOWMAXIMIZED(最大表示)
                                      //          SW_SHOWMINIMIZED(アイコン表示)
                                      //          SW_HIDE(隠しウィンドウにする)

    UpdateWindow(hWnd);               // プロシージャにWM_PAINTメッセージを送る(ウィンドウ表示)
    
    // メッセージループ(送られてくるメッセージをここで翻訳してプロシージャに送る)(WM_QUITメッセージが来るまで)
    while (GetMessage(&msg, NULL, 0, 0))   // メッセージを取り出す
    {
        TranslateMessage(&msg);            // キーが押下されたとき仮想キーメッセージを出す
        DispatchMessage(&msg);             // ウィンドウプロシージャにメッセージを送る
    }
    return (msg.wParam);
}

// メッセージプロシージャ(メインウィンドウ、メッセージ処理)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg) 
    {
        case WM_DESTROY:              // ウィンドウ破棄メッセージ
            PostQuitMessage(0);       // WM_QUITを送り出しWinMain関数のループを終了
            break;
        default:                      // その他のメッセージ
            return(DefWindowProc(hWnd, msg, wParam, lParam)); // アプリケーションの提供しないメッセージにデフォルトメッセージ処理を提供
    }
    return (0L);
}


実行時のイメージ。
こんなのできます。
これだけなら、「だからどうした」ですが、これがすべてのはじまりです。
これをベースに、アプリケーションとゲームとかを作っていったりします。

下のイメージは、縮小しています。
  とにかく自力でウィンドウ



記述:2010年12月頃
別サイトより移動:2012年1月頃






Twitter Facebook Google+ はてな Pocket LINE




一言掲示板です。なにかありましたら以下に書いて書き込みボタンを押して下さい。
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。

お名前

コメント




【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ