// CTabCtrlタブコントロール実装サンプル // (C)2003 Yutaka Wada, AirparkLab // メインダイアログ.hで子ウインドウをメンバ登録する。 CTreeCtrl m_Tree; CListCtrl m_List; // メインダイアログ.cppのOnInitDialog()でタブと子ウインドウの設定を行う // タブコントロールの設定 // 「ツリー」タブ追加 TC_ITEM tcItem; tcItem.mask = TCIF_TEXT; tcItem.pszText = "ツリー"; tcItem.cchTextMax = strlen( tcItem.pszText ); tcItem.iImage = -1; tcItem.lParam = 0; m_Tab.InsertItem( 0, &tcItem ); tcItem.mask = TCIF_TEXT; // 「リスト」タブ追加 tcItem.pszText = "リスト"; tcItem.cchTextMax = strlen( tcItem.pszText ); tcItem.iImage = -1; tcItem.lParam = 0; m_Tab.InsertItem( 1, &tcItem ); // タブコントロールのサイズをダイアログに合わせる CRect TabRect; GetClientRect( TabRect ); m_Tab.MoveWindow( TabRect ); // ツリーコントロールの設定 CRect ItemRect; m_Tab.GetItemRect( 0, ItemRect ); CRect CtrlRect = CRect( TabRect.left+3, TabRect.top+ItemRect.Height()+5, TabRect.right-3, TabRect.bottom-3 ); m_Tree.Create( WS_VISIBLE|WS_CHILD|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS, CtrlRect, &m_Tab, NULL ); m_Tree.ModifyStyleEx( NULL, WS_EX_CLIENTEDGE, SWP_DRAWFRAME ); // アイテムの追加 HTREEITEM hItem = m_Tree.InsertItem( "ルートアイテム" ); hItem = m_Tree.InsertItem( "サブアイテム1", hItem ); hItem = m_Tree.InsertItem( "サブアイテム2", hItem ); // リストコントロールの設定 m_List.Create( WS_VISIBLE|WS_CHILD|LVS_REPORT, CtrlRect, &m_Tab, NULL ); m_List.ModifyStyleEx( NULL, WS_EX_CLIENTEDGE, SWP_DRAWFRAME ); // カラム作成 LV_COLUMN lvclm; lvclm.mask = LVCF_TEXT|LVCF_WIDTH; lvclm.pszText = "名前"; // ヘッダ lvclm.cx = 80; // カラムのドット幅 m_List.InsertColumn( 0, &lvclm ); // ヘッダの追加 lvclm.pszText = "サイズ"; lvclm.cx = 80; m_List.InsertColumn( 1, &lvclm ); lvclm.pszText = "ファイルの種類"; lvclm.cx = 150; m_List.InsertColumn( 2, &lvclm ); // 項目追加 int i = 0; m_List.InsertItem( i, "NAME" ); m_List.SetItemText( i, 1, "SIZE" ); m_List.SetItemText( i, 2, "TYPE" ); // 最初のタブ選択 OnSelchangeTab( NULL, NULL ); // タブ切り換えハンドラ void C????Dlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) { switch( m_Tab.GetCurSel() ){ case 0: m_Tree.ShowWindow( SW_SHOW ); m_List.ShowWindow( SW_HIDE ); break; case 1: m_Tree.ShowWindow( SW_HIDE ); m_List.ShowWindow( SW_SHOW ); break; } if( pResult ) *pResult = 0; } // メインダイアログの大きさにタブと子ウインドウを追従させる void C????Dlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); if( m_bInitFlag == TRUE ){ CRect TabRect; GetClientRect( TabRect ); m_Tab.MoveWindow( TabRect ); CRect ItemRect; m_Tab.GetItemRect( 0, ItemRect ); CRect CtrlRect = CRect( TabRect.left+3, TabRect.top+ItemRect.Height()+5, TabRect.right-3, TabRect.bottom-3 ); m_Tree.MoveWindow( CtrlRect ); m_List.MoveWindow( CtrlRect ); } }