|
フォームビューの基本
フォームビューは、SDI/MDIベースのアプリでダイアログリソースを元にして作成するビューです。フォームビューを使うと、ダイアログのようにウィンドウ上にいろいろなコントロールを配置することができます。
では、実際に作ってみます。今回はSDIで作成します。アプリケーションウィザードで「ドキュメントの種類」に「シングルドキュメント」を選択します。そして、「生成されたクラス」ページでビューの基本クラスに「CFormView」を選択します。これで、初期作成されるビューがCFormViewの派生クラスになります。

では、クラスビューで確認してみます。作成されたビュークラスがCFormViewの派生クラスになっていることがわかります。

次はダイアログリソースを編集していきましょう。今回は簡単に次のようにエディットボックスとボタンを1つずつ追加しました。

フォームビューもダイアログと同じようにDDX変数を追加したり、コントロールのイベントをハンドルすることができます。では、エディットボックスにDDX変数を追加します。

ボタンにはBN_CLICKEDのイベントハンドラを追加します。
それではコードのほうを見てみましょう。フォームビューは特定のダイアログリソースと関連付けられています。これはどこで行われているのでしょうか。フォームビューのクラス定義を見ると次のような記述があります。
class CFVView : public CFormView
{
protected: // シリアル化からのみ作成します。
CFVView();
DECLARE_DYNCREATE(CFVView)
public:
enum{ IDD = IDD_FV_FORM };
|
IDD_FV_FORMというのはダイアログリソースのリソースIDです。また、コンストラクタを見ると次のようになっています。
CFVView::CFVView()
: CFormView(CFVView::IDD)
, m_xvEdit1(_T(""))
{
// TODO: 構築コードをここに追加します。
}
|
CFormViewクラスのコンストラクタにダイアログのリソースIDを渡しているのがわかります。これによって特定のダイアログリソースとフォームビューが関連付けられているわけです。
それでは、コードを追加していきましょう。ビューの初期化処理はOnInitialUpdate()関数に記述します。
void CFVView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_xvEdit1 = _T("文字列を入力してください。");
UpdateData(FALSE);
}
|
ここでは、エディットボックスの文字列を初期化しました。UpdateData()関数を呼んで表示を更新します。次はボタンのイベントハンドラです。
// "取得"ボタン押下
void CFVView::OnBnClickedBtnGet()
{
UpdateData();
MessageBox(m_xvEdit1);
}
|
ここでは、エディットボックスの文字列をメッセージボックスに表示するようにしました。ではビルドして実行してみましょう。
エディットボックスに文字列を入力して「取得」ボタンを押すとメッセージボックスが表示されます。コントロールの操作はダイアログベースアプリとほぼ同じですね。ただしフォームビューはダイアログではなくあくまでビューの一種です。

|