- タブコントロールの使い方(1) -




タブコントロールはダイヤログに追加しただけでは機能しないので
OnInitDialog関数等で設定をしてやる必要があります。

まずタブコントロールにタブ札を作ります。
タブ札作成にはCTabCtrlクラスのメンバー関数InsertItemを使用します。


□ MSDNよりInsertItemの引用 □

 BOOL InsertItem(
  int nItem,
  TC_ITEM* pTabCtrlItem
 );

  ・nItemは新しいタブの 0 から始まるインデックス
   これはタブのIDのような物です

  ・pTabCtrlItemはタブの属性を指定するTCITEM 構造体へのポインタ

  ・戻り値は新しいタブの 0 から始まるインデックス


使用方法はTC_ITEM構造体を作成し、必要パラメータを設定してやり
InsertItem関数に引数としてTC_ITEM構造体のポインタを渡してやればOKです。


TC_ITEM構造体は以下のようになっています

 typedef struct tagTCITEM {
   UINT mask;
   LPTSTR pszText;
   int cchTextMax;
   int iImage;
   LPARAM lParam;
 } TCITEM;


maskには有効メンバーを設定
pszTextにはラベル文字を設定
cchTextMaxにはpszTextのバッファサイズを設定
iImageタブにイメージを使う場合の設定
lParamnにはアプリケーションの定義データ

詳しくはMSDN等で調べてみてください。
細かいところまでは書ききれないし、説明する自信も無いので…(^^;
サンプルではタブ札を2つ作り機能するように作ってみます。



≪ MFC ダイヤログベースでの作成サンプル ≫



 ■ダイヤログにタブコントロールを追加

      






 ■ClassWizardよりタブコントロールのメンバー変数を作成

      

      カテゴリ → コントロール
      変数タイプ → CTabCtrl





 ■OnInitDialog()関数に初期化の為のソース追加
////////////////////////////////////
// CTest10Dlg メッセージ ハンドラ

BOOL CTest10Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

// "バージョン情報..." メニュー項目をシステム メニューへ追加します。

// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty()){
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定

// TODO: 特別な初期化を行う時はこの場所に追加してください。

//--------タブコントロール初期化コード(ここから)----------

//TC_ITEM構造体のTCIF_TEXTを作成
TC_ITEM tab01;

//pszTextを使用するのでTCIF_TEXTを設定
tab01.mask = TCIF_TEXT;

//タブに表示される文字列の設定
tab01.pszText = "タブ1";

//タブ番号と、TC_ITEM構造体のTCIF_TEXTをInsertItemの引数に設定
m_tab_cnt.InsertItem(0,&tab01);


//同じように2つ目のタブを作成
TC_ITEM tab02;
tab02.mask = TCIF_TEXT;
tab02.pszText = "タブ2";
m_tab_cnt.InsertItem(1,&tab02);

//--------タブコントロール初期化コード(ここまで)----------

return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}





 ■以上、コンパイルすれば完成

      

      とりあえず初期化だけ作っています
      実際の機能をさせる所は次回で…