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

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




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

お名前

コメント




ファイル関連
C言語 ファイルオープン・クローズ
乱数
C言語 乱数発生関数例
Bitで遊ぶ
C言語 1バイトの数値内の何ビット目に1があるか返す関数例
C言語 1バイトの数値内の指定ビットの値を返す関数例
C言語 1バイトの数値内の指定ビットの値を1にする関数例
C言語 1バイトの数値内の指定ビットの値を0にする関数例
C言語 1バイトにいろいろな状態を入れてみる例
文字列操作
C言語 整数値を文字列に変換する関数例
C言語 ”ダブルコーテーションを文字列として扱う場合
C言語 CSVファイル形式のファイル内容を読み込む関数例
C言語 strtokでは連続トークンを正しく読み込まない
VisualC
C言語 とにかく自力でウィンドウ
C言語 UTF-8のファイル操作
その他
メモリリーク GDI関連のチェック方法
作ってみたアプリ
BMPの部分保存をするアプリ「ビットマップファイル部分取得」
16進数を自動加算してテキスト出力するアプリ
テキストファイル(txt)を字幕ファイル(srt)に変換するアプリ
C#
C# ファイルオープン・1行ずつ読み込み・書き込み・クローズ
C#のEXEは、中のソースコードのロジックを簡単に見られてしまうかも知れない
【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?

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