チュートリアル


SAMPLE http://tip.sakura.ne.jp/bin/simplewindow.exe( シンプルウィンドウ サンプル )


ウィンドウをつくる


おおまかには次の流れになる
// 擬似コード int main() { // Window の種類とメッセージに対する処理内容を登録 registerClass(); // 登録した Window をつくる HWND hWnd = CreateWindow(); // メッセージループ while ( true ) { GetMessage(); DispatchMessage(); } return 0; }



Windowクラスの登録


最低限必要なのは以下の設定。 WNDCLASS構造体型変数 に登録する SYNTAX ATOM RegisterClass( const WNDCLASS *wndCls ); ( typedef WORD ATOM ) cs.dwExStyle = WS_EX_LAYERED | WS_EX_TRANSPARENT; SetLayeredWindowAttributes POINT window procedure は [ window 内 ]で発生したイベント( 入力 )を処理する関数 callback を呼び出すのは WINDOWS
// シンプルなウィンドウを登録 ATOM registerClass() { WNDCLASSEX cls; // cls.cbSize = sizeof(WNDCLASSEX); // CS_HREDRAW( リサイズ時の 再描画 ) cls.style = CS_HREDRAW | CS_VREDRAW; // WindowProcedure の指定 // DefWindowProc を指定する。 cls.lpfnWndProc = WndProc; // 予約領域( byte サイズ )はいらない cls.cbClsExtra = 0; cls.cbWndExtra = 0; cls.hInstance = NULL; // window 上部の Icon Object のハンドル( LoadIcon() で Resource から読む ) // ICON, Cursor の指定なし cls.hIcon = NULL; cls.hCursor = NULL; // pointer の値を代入しているのか // 背景色の指定 ブラシオブジェクト cls.hbrBackground = (HBRUSH)(17); // Menu の指定もなし cls.lpszMenuName = NULL; // 登録するクラス名を MyWindow にする // ウィンドウクラスの名前 cls.lpszClassName = "MyWindow"; cls.hIconSm = LoadIcon(0, IDI_WINLOGO); // 登録 return RegisterClassEx(&cls); }
ATOM registerClass(HINSTANCE hInst) { WNDCLASSEX c; c.cbSize = sizeof(WNDCLASSEX); c.style = CS_HREDRAW | CS_VREDRAW; c.lpfnWndProc = WndProc; c.cbCExtra = 0; c.cbWndExtra = 0; c.hInstance = hInst; //c.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI___TPLVC__)); c.hIcon = LoadIcon(0, IDI_APPLICATION); c.hCursor = LoadCursor(NULL, IDC_ARROW); c.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); c.lpszMenuName = MAKEINTRESOURCE(IDC___TPLVC__); c.lpszClassName = strWndCls; //cls.hIconSm = LoadIcon(c.hInstance, MAKEINTRESOURCE(IDI_SMALL)); c.hIconSm = LoadIcon(0, IDI_WINLOGO); // 登録 return RegisterClassEx(&cls); }



Window.をつくる


SYNTAX HWND CreateWindow( LPCTSTR classname, // registerClass で登録したクラス名 LPCTSTR name, // タイトルバーに表示される文字 DWORD style, // WS_OVERLAPPEDWINDOW いつもの int x, y, w, h, // 位置と大きさ HWND hParent, // 親Window HMENU hMenu , HANDLE hInst, // このプロセスのハンドル LPVOID lpParam // LPVOID CREATESTRUCT::lpCreateParams にわたす 付加的なメモリ領域 );
CreateWindow( // 登録したクラス名, タイトル "MyWindow", "Title", // Window スタイル(見た目) ( WS_VISIBLE で表示 ) // WS_OVERLAPPEDWINDOW で通常のウィンドウになる。 WS_OVERLAPPEDWINDOW | WS_VISIBLE, // 表示位置 と 大きさ 0, 0, 600, 400, // 親とメニューの指定はなし。 NULL, NULL, hInst, NULL);