SWindow クラス

ウィンドウの作成・管理機能を提供します。ウィンドウ当てのメッセージが、そのインスタンスのコールバック用仮想関数に 送られてきます。MFC のCWnd に似てますが、よりシンプルです。他にファイルのドロップ(IDropTarget)を内包しており、コレも コールバック用仮想関数で捕らえる事ができます。
更新日 2014-07-29

仕様

Win32SDK で使えるウィンドウ管理クラスです。MFC ほどイチイチメンバ関数にしていません。Win32API でまかなってください。 ポイントはあくまで、ウィンドウメッセージをインスタンスでキャッチできるオブジェクト化にあります。実装は少々トリッキー ですが、そこそこ使えるシロモノになってるかと(^^;

ソースコード

swindow.h 右クリックで「対象をファイルに保存」でダウンロードしてください。

メソッド

CreateWindowEx()

ウィンドウを作成します。Win32API のCreateWindowEx と同じ引数です。成功するとTRUE が返ります。
SWindow wnd;
wnd.CreateWindowEx( 0, NULL, "SampleWnd", WS_VISIBLE | WS_OVERLAPPED,
 0, 0, 360, 270, NULL, NULL, hInstance, 0);

CreateDialogParam(), CreateDialogIndirectParam()

ダイアログを作成します。Win32API のCreateDialogParam と同じ引数です。成功するとTRUE が返ります。(ウィンドウプロシージャーは必要ありません)
SWindow wnd;
wnd.CreateDialogParam( hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, 0);

DialogBoxParam(), DialogBoxIndirectParam()

モーダルダイアログを作成します。Win32API のDialogBoxParam と同じ引数です。(ウィンドウプロシージャーは必要ありません) ダイアログを閉じるまで制御は戻りません。
SWindow dlg;
int nRet = dlg.DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, 0);

CreateStatusWindow(), CreateToolbarEx()

ステータスバーとツールバーを作成します。今思うと・・・メソッドとして実装すべきでは無かったかも。まぁその辺は メインでもないし、あまり考えないでおきましょう(笑)

GetSafeHwnd()

ウィンドウハンドルを返します。ウィンドウの操作はWin32API を使って下さい。
HWND hWnd = dlg.GetSafeHwnd();
::SetWindowText(hWnd, __TEXT("Sumple window."));

GetInstanceHandle()

ウィンドウ作成時に渡されたインスタンスハンドルを返します。子ウィンドウを作る時に使いまわします。
HINSTANCE hInstance = dlg.GetInstanceHandle();

GetParent()

親ウィンドウのハンドルを返します。無ければNULL を返します。
HWND hParent = dlg.GetParent();

GetLPSWindowFromHWnd()

引数に渡したウィンドウハンドルを元に、SWindow クラスを探し出しポインタを返します。派生クラスの場合は ダウンキャストしてアクセス可能です。
HWND hParent = dlg.GetParent();
LPSWindow* lpParent = dlg.GetLPSWindowFromHWnd( hParent );
((ParentWnd*)lpParent)->m_nParam = 3;

DragAcceptFile()

ファイルのドラッグを受け入れるかどうかを設定します。受け入れるとコールバック用仮想関数OnDragEnter(), OnDragOver(), OnDragLeave(), OnDrop() がそれぞれ呼ばれます。
dlg.DragAcceptFile(TRUE);

OnDragEnter()

ファイルがドラッグされてウィンドウ上に乗った時に呼ばれます。詳しくはIDropTarget::DragEnterを参考にしてください。

OnDragOver()

ファイルがドラッグされてウィンドウ上に乗った時に呼ばれます。詳しくはIDropTarget::DragOverを参考にしてください。

OnDragLeave()

ファイルがドラッグされてウィンドウ上に乗った時に呼ばれます。詳しくはIDropTarget::DragLeaveを参考にしてください。

OnDrop()

ファイルがドラッグされてウィンドウ上に乗った時に呼ばれます。詳しくはIDropTarget::Dropを参考にしてください。

MessageLoop()

この関数は、最初にウィンドウを作成した後に1度だけ実行するものです。通常WinMain() でウィンドウを作成し、この関数を呼び出す事で ウィンドウアプリケーションが起動します。以後作成される全てのウィンドウのメッセージをループして読みつづけ、ウィンドウが一つも なくなりWM_QUIT がポストされるまで制御を返しません。メンバ関数ではなくstatic なグローバル関数となってます。

使用例