« 忘れてしまった心 | メイン | みふでもわかる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