「ダイアログ バー」の追加

投稿日 by Iwao

Win10 環境で VC 6 を使えるようにはなったが,「コンポーネントギャラリ」はうまく機能しないみたい.
VC 6 コンポーネント ギャラリ
今回利用しようとしたのは「ダイアログ バー」.ヘルプの内容は次の様なもの.


ダイアログ バー コンポーネント : 挿入結果
ダイアログ バー コンポーネントを挿入すると、プロジェクト コードに次の変更が加えられます。

  • プロジェクトのリソース スクリプトにダイアログ テンプレート リソースが追加されます。このダイアログ テンプレートにコントロールを追加するには、Visual C++ のダイアログ エディタを使用できます。
  • 指定したフレーム ウィンドウ クラスに、CDialogBar 型のメンバ変数の宣言が追加されます。デフォルトの変数名 m_wndMyDialogBar は変更できます。ダイアログ バーの初期プロパティ (標準では可視、ドッキング可能など) も指定できます。
  • フレーム ウィンドウの OnCreate メンバ関数に初期化コードが追加されます。この初期化コードは、CDialogBar::Create を呼び出して、ダイアログ バーのドッキング オプションを設定します。また、ダイアログ バーの表示/非表示に関する初期化もここで行います。
  • ダイアログ バーの表示/非表示に関するメニュー項目のサポートが追加されます。

ダイアログ バー コンポーネントを挿入しても、ダイアログ バーの表示/非表示を切り替えるためのメニュー項目はメニュー リソースに追加されません。このメニュー項目はメニュー エディタを使用して手作業で追加する必要があります。コンポーネントは、メニュー項目の追加手順を記述した “TODO” コメントを追加します。このコメントは、ダイアログ バーを追加したフレーム クラスの OnCreate 関数に挿入できます。

  • 2 つの関数のハンドラがフレーム ウィンドウ クラスのメッセージ マップに追加されます。
  • OnUpdateXXX 関数はメニュー項目の状態を随時更新します。
  • 次に、OnBarCheck 関数は、メニュー項目のチェックマークのオン/オフどおりに、ダイアログ バーが表示/非表示になっているかどうかを調べます。

メニュー項目のプロンプト文字列がプロジェクトのストリング テーブル リソースに追加されます。コマンド ハンドラをインプリメントするには、ClassWizard を使用して、次の手順に従います。

  1. ResourceView で、ダイアログ バーのダイアログ テンプレートを開きます。
  2. Ctrl キーを押しながら W キーを押して ClassWizard を開きます。[クラスの追加] ダイアログ ボックスが表示されます。
  3. [クラスを選択] をクリックして、[OK] をクリックします。[クラスの選択] ダイアログ ボックスが表示されます。
  4. ダイアログ バー コンポーネントを挿入したときに指定したフレーム ウィンドウ クラスの名前をクリックして、[選択] をクリックします。このクラスとダイアログ リソースを関連付けるかどうかを確認するメッセージ ボックスが表示されます。
  5. [はい] をクリックします。[MFC ClassWizard] ダイアログ ボックスの [メッセージ マップ] タブの [オブジェクト ID] ボックスの一覧に、ダイアログ バーのコントロールの ID が表示されます。
  6. 通常の方法で、コントロールにコマンド ハンドラを割り当てます。

メモ ActiveX コントロールをダイアログ バーに追加する場合は、プロジェクトが ActiveX コントロール コンテナ機能をサポートしている必要があります。AppWizard でプロジェクトのスケルトンを生成したときに [ActiveX コントロール] オプションを選択していた場合は、ActiveX コントロール コンテナ機能のサポートがプロジェクトに含まれています。サポートがない場合は、[Gallery] の [Visual C++ Components] フォルダから [ActiveX コントロール コンテナ コンポーネント] を選択してプロジェクトに挿入する必要があります。


実際のコードなどの編集は次の様な手順.

ダイアログリソースの追加.
	「スタイル」を「チャイルド」に.
	「境界線」を「しない」に.
	「タイトルバー」のチェックを外す.

CMainFrame に変数を追加.
	CDialogBar	m_wndDlgBar ;

CMainFrame::OnCreate に追加.
	{
		if (!m_wndDlgBar.Create(this, IDD_DIALOG_BAR,
			CBRS_RIGHT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
			ID_DIALOG_BAR))
		{
			TRACE0("Failed to create dialog bar m_wndDlgBar\n");
			return -1;      // fail to create
			}
	//	m_wndDlgBar.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
	//	EnableDocking(CBRS_ALIGN_ANY);
	//	DockControlBar(&m_wndDlgBar);
		}

Resource.h に ID_DIALOG_BAR を追加.

ダイアログバー上のコントロールに対しての操作は次の様な感じ.
void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
	CFrameWnd::OnSize(nType, cx, cy);
	if (m_wndDlgBar.GetSafeHwnd() == NULL)	{	return	;	}
	CListBox*	listBI = (CListBox*)m_wndDlgBar.GetDlgItem(IDC_LIST_BI) ;
	FitWindow(&m_wndDlgBar,listBI,3,	FALSE,	FALSE,	FALSE,	FALSE) ;
	}
この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です