子ウィンドウの作成1
#include <windows.h>
#define CLASSNAME "MyWindowClass"
// グローバル変数:
HINSTANCE hInst;
// このコード モジュールに含まれる関数の宣言を転送します:
ATOM MyRegisterClass( HINSTANCE );
BOOL InitInstance( HINSTANCE, int );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
//----------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
MSG msg;
MyRegisterClass( hInstance );
if ( !InitInstance( hInstance, nCmdShow ) ) return FALSE;
// メイン メッセージ ループ:
while ( GetMessage( &msg, NULL, 0, 0 ) ) {
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return ( int )msg.wParam;
}
//----------------------------------------------------------------
ATOM MyRegisterClass( HINSTANCE hInstance ) {(省略)}
//----------------------------------------------------------------
BOOL InitInstance( HINSTANCE hInstance, int nCmdShow )
{
HWND hWnd, hWndChild, hWndOwned;
hInst = hInstance;
// メインウィンドウ
hWnd = CreateWindow( CLASSNAME, "Main Window",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
300, 200, NULL, NULL, hInstance, NULL );
if ( !hWnd ) return FALSE;
// 子ウィンドウ
hWndChild = CreateWindow( CLASSNAME, "Child Window",
WS_CHILD | WS_CAPTION | WS_VISIBLE,
0, 0, 150, 100, hWnd, NULL, hInstance, NULL );
if ( !hWndChild ) return FALSE;
// 被所有ウィンドウ
hWndOwned = CreateWindow( CLASSNAME, "Owned Window",
WS_POPUP | WS_CAPTION | WS_VISIBLE,
0, 0, 150, 100, hWnd, NULL, hInstance, NULL );
if ( !hWndOwned ) return FALSE;
// ウィンドウを表示する
ShowWindow( hWnd, nCmdShow );
UpdateWindow( hWnd );
return TRUE;
}
//----------------------------------------------------------------
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) {(省略)}
<親子関係>
ウィンドウ・スタイルにWS_CHILDを指定して、hWndParentに親ウィンドウのハンドルを指定する。
・子ウィンドウは親ウィンドウのクライアント領域の外側に表示したり移動することができない。
・親ウィンドウを移動すると子ウィンドウも一緒に移動する。
・親ウィンドウを最小化すると子ウィンドウも見えなくなる。
・自由に親ウィンドウを変更することができる。
<所有/被所有>
ウィンドウ・スタイルにWS_CHILDを指定せず、hWndParentにオーナー・ウィンドウのハンドルを指定する。
・被所有ウィンドウの移動や表示が、所有ウィンドウの内部に限定されない。
・所有ウィンドウを移動しても被所有ウィンドウは移動しない。
・所有ウィンドウを最小化すると被所有ウィンドウも見えなくなる。
・オーナー・ウィンドウはいったん設定すると、後から変更できない。

Comments