2004年06月06日

特殊なウィンドウを持ったMFCアプリケーションの最初の一歩

環境
Visual C++.NET 2003
ライブラリ
MFC 7.1

MFCは、SDIやMDIなどの標準的なウィンドウを持ったアプリケーションを開発するのに向いたクラスライブラリですが、
MFCで特殊なウィンドウも作ることができます。
例えばHeimdallrはMFCを使って作られています。(HeimdallrのGUIはこんな感じです。)

しかし、特殊なウィンドウを持ったアプリケーションを作りたいんだけれど、 まず最初にどうすれば良いの?というあたりが躓きやすいので、
私が特殊なウィンドウを持ったアプリケーションを開発するとき、 プロジェクトの初期設定をどのようにしているかというのを書いておきます。

最初に、新しいプロジェクトを作成します。
プロジェクトの種類はVisual C++プロジェクトのMFCアプリケーションです。

次に、MFCアプリケーションウィザードでプロジェクトの初期設定を行います。
変更項目は以下の通りです。

  • アプリケーションの種類はシングル ドキュメント
  • ドキュメント ビュー アーキテクチャサポートのチェックをOFF
  • MFCの使用法はスタティック ライブラリでMFCを使用
  • 初期ステータス バーをOFF
  • ツールバーはなし

出来上がったスケルトンコードから、CChildViewを取り除きます。

最初に、プロジェクトから、ChildView.cppとChildView.hを削除します。

次に、MainFrm.hから以下の行を削除します。

  • #include "ChildView.h"
  • OnCmdMsg
  • m_wndView
  • OnSetFocus

OnCreateも削除しても良いのですが、たいていの場合OnCreateにコードを追加する必要が発生しますのでそのままにしておくのが無難でしょう。

次に、MainFrm.cppから以下の行を削除します。

  • ON_WM_SETFOCUS
  • OnSetFocusメンバ関数全部
  • OnCmdMsgメンバ関数全部

次に、OnCreateを編集して以下のようにします(CChildViewに関するコードを取り除いただけです)。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	return 0;
}

最後に、PreCreateWindowを以下のように編集します。ウィンドウスタイルは、他に追加したいスタイルがあればどんどん追加しておきましょう。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;

	cs.x = 100;
	cs.y = 100;
	cs.cx = 200;
	cs.cy = 200;
	cs.style = WS_VISIBLE | WS_BORDER | WS_POPUP;
	cs.dwExStyle = 0;
	cs.hMenu = NULL;
	cs.lpszClass = AfxRegisterWndClass(0, ::LoadCursor(NULL, IDC_ARROW), NULL, AfxGetApp()->LoadIcon(IDR_MAINFRAME));
	return TRUE;
}

さて、コンパイルしてみましょう。 スクリーン左上の方に怪しげな四角が表示されていたら成功です。
四角の中を左クリックし、ALT+F4を押してアプリケーションが終了することを確認しておきましょう。

あなたのお望みのインターフェースにするにはまだまだやることがたくさんあるとは思いますが、ひとまずこれが最初の一歩になるでしょう。

投稿者 MASATO : 2004年06月06日 22:05 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?