ドラッグ&ドロップによるAP起動
起動パラメータの取得




今回は前回に引き続きドラッグ&ドロップですが、今回はプログラムのアイコンにファイルを ドロップしての起動です。
ドロップ起動したファイル名というのは実は起動パラメータで渡されるのです。ということで、 起動パラメータの取得方法でもありまする。

(サンプル:WinTail.cpp)
/////////////////////////////////////////////////////////////////////////////
// CWinTailApp クラスの初期化

BOOL CWinTailApp::InitInstance()
{
	if (!AfxSocketInit())
	{
		AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
		return FALSE;
	}

	AfxEnableControlContainer();

	// 標準的な初期化処理
	// もしこれらの機能を使用せず、実行ファイルのサイズを小さく
	// したければ以下の特定の初期化ルーチンの中から不必要なもの
	// を削除してください。

#ifdef _AFXDLL
	Enable3dControls();		// 共有 DLL の中で MFC を使用する場合にはここを呼び出してください。
#else
	Enable3dControlsStatic();	// MFC と静的にリンクしている場合にはここを呼び出してください。
#endif

	// 設定が保存される下のレジストリ キーを変更します。
	// TODO: この文字列を、会社名または所属など適切なものに
	// 変更してください。
	SetRegistryKey(_T("Local AppWizard-Generated Applications"));

	LoadStdProfileSettings();  // 標準の INI ファイルのオプションをロードします (MRU を含む)

	// アプリケーション用のドキュメント テンプレートを登録します。ドキュメント テンプレート
	//  はドキュメント、フレーム ウィンドウとビューを結合するために機能します。

	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CWinTailDoc),
		RUNTIME_CLASS(CMainFrame),       // メイン SDI フレーム ウィンドウ
		RUNTIME_CLASS(CWinTailView));
	AddDocTemplate(pDocTemplate);

	// DDE、file open など標準のシェル コマンドのコマンドラインを解析します。
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);

	// コマンドラインでディスパッチ コマンドを指定します。
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;

	// メイン ウィンドウが初期化されたので、表示と更新を行います。
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();


	// 起動パラメータにファイル名があれば取得する
	if( strlen(CWinApp::m_lpCmdLine) != 0 )
	{
		::MessageBox( NULL, "OK", "File Name", MB_OK | MB_ICONINFORMATION );

		E_ReadFileName = CWinApp::m_lpCmdLine;

		::MessageBox( NULL, E_ReadFileName, "File Name", MB_OK | MB_ICONINFORMATION );

		// MainFrmクラスへファイルがファイルが選択された事を通知する
		::SendMessage( E_WinHdl_Main, D_MSG_FILESELECTED, NULL, NULL );
	}
	else
	{
		::MessageBox( NULL, "NG", "File Name", MB_OK | MB_ICONINFORMATION );
		;
	}

	return TRUE;
}
起動パラメータの取得方法は簡単でCWinApp::m_lpCmdLineに入っています。
CWinAppは通常はプロジェクト名.cppでしか参照できないので、そのソースに処理を 追加してやりました。
ここの処理はViewクラスのOnCreate関数よりも後に動くようで、ViewのOnCreateで 起動パラメータを参照する処理を追加していて、動かんと悩んだ事があります。お気を付けて。
ドロップ起動するときは、前回やったウィンドウの拡張スタイル変更をする必要があると 思います。




N総研ソフトウェア開発部のTOPに戻る。

このページに関するご意見・質問は
ドンタコスN村 E-mail:wnaka@coco.ned.co.jp
まで送信してください。