誰でもダイアログアプリケーション :【VC++】


ブラウザでダウンロード

lightbox.lib で簡単に作成
Visual Studio 2005 の Express では、SDK を別途ダウンロードして
インストールする必要がありますが、通常環境があれば、Visual Studio を
動かさなくともダイアログアプリケーションを作成できます。

ダイアログリソースの作成は、GUI でフリーで作成できる XNResourceEditor 3.0.0.1 
を使用します( こちらを参照 )
※ Visual Studio 2005 Express Edition のフリーインストールに関しては、こちら を参照して下さい

lightbox.lib の機能をいろいろ使っていますが、このスケルトン以上の部分は、
普通に Win32 API で追加して作成できます。

このダイアログは、タスクバーにも表示されますし、最小化も可能です。
XNResourceEditor を変更する事によって、コントロールを追加できますし、
アイコンも変更できます。

リソースの扱いは、XNResourceEditor で割り振られた番号を直接使用します。
これは本来のWin32API の普通のやり方で、マクロを使用していないだけです。
lightbox.lib に関しては、こちらの 標準クラス (lightbox.lib) を参照して下さい
// *********************************************************
// 【Windows ダイアログボックスプログラミング】
// *********************************************************

#define _WIN32_WINNT 0x0500
#include <tchar.h>
#include "lightbox\lightbox.h"

#pragma comment( lib, "lightbox\\lightbox.lib" )
#pragma comment( lib, "shlwapi.lib" )
#pragma comment( lib, "wininet.lib" )

#define CONNECT_DELOBJECT	LBOX_USER + 1

LboxTool Tool;			// ツールオブジェクト
LboxDlg *Dlg = NULL;

LRESULT CALLBACK DialogProc( HWND, UINT, WPARAM, LPARAM );

// *********************************************************
// Windows アプリケーションとしてのエントリポイント
// Link.exe で /SUBSYSTEM:WINDOWS がデフォルトで
// 指定される事になります
// *********************************************************
int APIENTRY _tWinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPTSTR lpCmdLine,
	int nCmdShow
)
{

	// ダイアログ表示
	DialogBox(
		hInstance,
		(LPCTSTR)1, 
		GetDesktopWindow(), 
		(DLGPROC)DialogProc);

	return 0;
}


// *********************************************************
//  MDB 接続ダイアログ
// *********************************************************
LRESULT CALLBACK DialogProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{

	switch( message ) {
		case WM_INITDIALOG:

			// ダイアログオブジェクト作成
			Dlg = new LboxDlg( hDlg );
			Dlg->ChangeIcon( 1 );

			// デスクトップの中央
			Dlg->MoveWindow(
					(Tool.DesktopWidth() - Dlg->Width())/2,
					(Tool.DesktopHeight() - Dlg->Height())/2
			);

			return true;

		case WM_COMMAND:

			// OK ボタン
			if( LOWORD(wParam) == 1 ) {
				LboxString LString;
				LString.Printf("IDOK の番号 : %d, IDCANCEL の番号 : %d", IDOK, IDCANCEL );
				MessageBox(hDlg, LString.szLboxString, "タイトル", MB_OK );
			}

			// キャンセルボタンで終了
			if( LOWORD(wParam) == 2 ) {
				Dlg->End( LOWORD(wParam) );
				Dlg->SendMsg( CONNECT_DELOBJECT, 0, 0 );
			}

			break;

		case CONNECT_DELOBJECT:

			// ダイアログオブジェクトの廃棄
			delete Dlg;
			break;

	}
	return FALSE;
}