« 忘れてしまった心 | メイン | みふでもわかるWIN32API講座 - 簡単な描画編 »

2005年08月28日

みふでもわかるWIN32API講座

講座じゃなくて覚書ですけどね。

Windowの作成

ウィドウクラス

作りたいウィンドウの情報を"ウィンドウクラス"に納め、windowsに登録しなければならない。
WNDCLASSEX構造体を使い、RegisterClassEx(const WNDCLASSEX *)で登録する。

wcex.cbSize = sizeof(WNDCLASSEX); //構造体のサイズ
wcex.style = CS_HREDRAW | CS_VREDRAW; //スタイル
wcex.lpfnWndProc = MainWindowProc; //ウィンドウプロシージャ
wcex.cbClsExtra = 0; //追加領域
wcex.cbWndExtra = 0; // 々
wcex.hInstance = hInstance; //今となっては不必要?
wcex.hIcon = NULL; //アイコンを使うなら
wcex.hCursor = NULL; //カーソルの形を変えるなら
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //背景色を変えるなら
wcex.lpszMenuName = NULL; //メニューを使うなら
wcex.lpszClassName = WNC_NAME; //このウィンドウクラスの名前
wcex.hIconSm = NULL; //小さいアイコンを別途使用するなら

作り出す

HWND CreateWindow(
LPCTSTR lpClassName, //ウィンドウクラスの名前
LPCTSTR lpWindowName, //ウィンドウの名前(タイトルバー)
DWORD dwStyle, //スタイルの選択
int x, int y, int nWidth, int nHeight, //座標とサイズ
HWND hWndParent, //親ウィンドウがあるなら
HMENU hMenu, //メニューがあるなら
HANDLE hInstance, //インスタンスハンドルはいらないかもしれない
LPVOID lpParam //基本的にNULL
);

表示する

ShowWindow(hWnd,SW_SHOW);
最初にWM_PAINTを送信する・・・であってたっけっかなあ。

破棄する

BOOL DestroyWindow(HWND hWnd);
BOOL UnregisterClassEX(LPCSTR lpClassName, HINSTANCE hInstance);

制御

メッセージループ

while( GetMessage( &msg, NULL, 0, 0 ) ){
TranslateMessage( &msg );
DispatchMessage( &msg );
}

TranslateMessageで文字列を読めるようにする……んだっけっか。違う気がする。
DispatchMessageは、受け取ったメッセージを対象のプロシージャに中継する為の物。

ウィンドウプロシージャ

LRESULT CALLBACK WindowProc (
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) //引数は固定。ハンドル,メッセージ本体,そのパラメータ
{
switch(uMsg) {
case WM_DESTROY: //補足したいメッセージを振り分ける
PostQuitMessage(0); //メッセージループを終了させる
return 0;
}

return DefWindowProc(hWnd, uMsg,wParam, lParam); //必要無いメッセージはデフォルトウィンドウプロシージャに送る
}

投稿者 miff : 2005年08月28日 18:36



XREAAD