よろしくおねがいします。下記サイトを参考に
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_DlgBar.html
ダイアログバーを作成するのですが、ダイアログバーの作成に失敗し、Debug Assertion
Failed が発生します。
作成方法が古いのでしょうか?原因が不明です。ご教示願えないでしょうか。
環境:Windows 7 32bit Visual Studio 2010 pro MFC SDI
1.プロジェクトの作成
SDIのプロジェクトを新規作成する。このとき、ビューはCEditViewクラスに設定する。
2.CDialogBar型メンバ変数の追加
CFrameWndクラスの派生クラスであるCMainFrameクラスに、CDialogBar型のメンバ変数
m_wndDlgBarを追加する。
3.ダイアログリソースの作成
リソースエディタを使い、ダイアログリソースを新規作成する。リソースIDは
IDD_DIALOGBAR1とし、 プロパティのスタイルは「チャイルド」、境界線は「なし」とす
る。 上図を参考に、エディットボックスとボタンをダイアログに貼り付ける。 エディッ
トボックスのIDはIDC_EDIT_SEARCH、ボタンのIDはIDC_BUTTON_SEARCHとする。
4.ダイアログバーの生成
CMainFrame::OnCreate関数を以下のように修正する。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
(中略)
// TODO: ツール バーおよびメニュー バーをドッキング可能にしない場合は、
この 5 つの行を削除します
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndMenuBar);
DockPane(&m_wndToolBar);
// ダイアログバーの生成
if(!m_wndDlgBar.Create(this, IDD_DIALOGBAR1, WS_VISIBLE | CBRS_TOP,
AFX_IDW_TOOLBAR))
{
TRACE0(Failed to create toolbar\n);
return -1; // 作成に失敗
}
m_wndDlgBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndDlgBar);
m_wndDlgBar.SetWindowText(文字列の検索);
return 0;
}
Debug Assertion Failed!
ASSERT in winfrm2.cpp (line 92) :
pDockBar = (CDockBar*)GetControlBar(dwDockBarMap[i][0]);
ASSERT(pDockBar != NULL); // ここでASSERT in
winfrm2.cpp (line 92) :
// assert fails when initial CBRS_ of bar does not
// match available docking sites, as set by EnableDocking()
break;
自己解決しました
SDIを作成する際に、クラッシックスタイル、ドッキング可能に指定することで実現しま
した。