|
ダイアログにダイアログバーをつける
今回はダイアログにダイアログバーをつけてみます。ダイアログバーというのはツールバーやステータスバーと同じ「コントロールバー」の一種です。ダイアログリソースを元にしたバーを作成することができます。
では、普通にダイアログベースでプロジェクトを作成します。メインのダイアログは特に何もない次のようなものにしました。

次はダイアログバー用のダイアログリソースを新規作成します。今回は次のようにエディットボックスとボタン1つを追加しました。バーになるので上下左右の余白部分の大きさは調整しておきましょう。

次はプロパティです。ダイアログバーはメインダイアログの子ウィンドウになるので、「Style」を「子」にします。また、このままだと境界がはっきりわからないので、今回は「Client Edge」を「True」にしています。

ダイアログバーにもコントロールのイベントを追加できます。ボタンに「BN_CLICKED」のハンドラを追加します。追加するクラスは親ウィンドウであるダイアログクラスにするとよいでしょう。

ダイアログバー用のダイアログは特定のダイアログクラスに結び付けられているわけではないのでDDX変数はこのままでは追加できません。しかし、今回はエディットボックス1つだけなのでこのままでよいでしょう。
次は、ダイアログクラスにCDialogBarクラスの変数を追加します。

では、コードの方を実装していきましょう。まずは、OnInitDialog()での初期化処理です。
BOOL CDlgBarDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
{
int err = 0;
if (!err) if (!m_dlgBar.Create(this,
IDD_DLGBAR, CBRS_TOP, IDD_DLGBAR)) err = 1;
if (!err) RepositionBars(IDD_DLGBAR, IDD_DLGBAR, 0);
}
return TRUE;
}
|
ここではまず、CDialogBar::Create()関数でダイアログバーを作成します。引数には親ウィンドウ、ダイアログリソースID、ダイアログバーを配置する位置等を指定します。ここではウィンドウの上部にダイアログバーを表示させるようにしています。
virtual BOOL CDialogBar::Create(
CWnd* pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID); |
| 説明: |
ダイアログバーの作成 |
| 引数: |
pParentWnd:親ウィンドウへのポインタ
nIDTemplate:ダイアログリソースのID
nStyle:ダイアログバーを配置する位置。CBRS_TOP、CBRS_BOTTOM、CBRS_NOALIGN、CBRS_LEFT、CBRS_RIGHTのどれか
nID:ダイアログバーのコントロールID |
| 戻り値: |
正常終了した場合は0以外。それ以外の場合は0 |
次はCWnd::RepositionBars()関数でコントロールバーの再配置をします。
void CWnd::RepositionBars(
UINT nIDFirst, UINT nIDLast, UINT nIDLeftOver, UINT nFlag = reposDefault,
LPRECT lpRectParam = NULL, LPCRECT lpRectClient = NULL,
BOOL bStretch = TRUE); |
| 説明: |
コントロールバーの再配置 |
| 引数: |
nIDFirst:再配置するコントロールバーの範囲の最初のID
nIDLast:再配置するコントロールバーの範囲の最後のID
nIDLeftOver:クライアント領域の残りの部分となるペインのID |
| 戻り値: |
なし |
次は「取得」ボタンのイベントハンドラです。ここではエディットボックスから文字列を取得してメッセージボックスを表示しています。
// "取得"ボタン押下
void CDlgBarDlg::OnBnClickedBtnGet()
{
CString dlgTxt;
int err = 0;
if (!err) if (!m_dlgBar.GetDlgItemText(IDC_EDIT1, dlgTxt)) err = 1;
if (!err) MessageBox(dlgTxt);
}
|
では、ビルドして実行してみましょう。ダイアログバーが表示されました。取得ボタンを押すとメッセージボックスに文字列が表示されます。

ちなみに、表示位置を左、下、右と変えてみると次のようになります。



ダイアログバーはコントロールバーの一種なので、ツールバーやステータスバーをつけるのと同じ方法でダイアログにつけることができるというわけです。
|