SAMPLE
シンプルウィンドウ サンプル
■ ウィンドウをつくる
おおまかには次の流れになる
// 擬似コード
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);