50template<
typename TAB = CTabCtrl>
64 template<
typename TYP>
67 return AddItem(lpszName, pWnd, TYP::IDD);
79 int AddItem(LPCTSTR lpszName, CDialog* pWnd, UINT idd)
81 CWnd* pParent = GetParent();
83 if ( ::IsWindow(P->GetSafeHwnd()) )
85 ASSERT0(
false,
"AddItem",
"既にクリエイトされているObjectが指定されました。" );
88 if ( ! P->Create(idd, pParent) )
90 ASSERT0(
false,
"AddItem",
"クリエイトに失敗しました。" );
93 P->SetParent(pParent);
94 this->
SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
95 P->SetWindowText(lpszName);
96 DWORD style = P->GetStyle();
97 if ( (style & WS_CHILD) == 0 )
99 ASSERT0(
false,
"AddItem",
"ダイアログのリソースに、チャイルドのスタイルがありません。" );
103 P->ModifyStyleEx(0, WS_EX_CONTROLPARENT);
104 P->ModifyStyle(DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU, 0, SWP_FRAMECHANGED);
105 int i = _super::GetItemCount();
106 int r = _super::InsertItem(i, lpszName);
110 int o = _super::GetCurSel();
115 _super::SetCurSel(o);
169 return _super::SetCurSel(nItem);
180 return _super::SetCurSel(
FindItem(page));
191 return _super::GetCurSel();
218 return _super::DeleteItem(nItem);
238 return _super::DeleteAllItems();
252 _super::PreSubclassWindow();
267 virtual BOOL
OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* _pResult)
269 if ( message == WM_NOTIFY )
271 LPNMHDR lpNmHdr =
reinterpret_cast<LPNMHDR
>(lParam);
272 if ( lpNmHdr->hwndFrom == m_hWnd && lpNmHdr->code == TCN_SELCHANGE )
274 m_SetCurSel(_super::GetCurSel());
277 return _super::OnChildNotify(message, wParam, lParam, _pResult);
289 virtual LRESULT
WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
309 return _super::WindowProc(message, wParam, lParam);
314 void m_SetCurSel(
int idx)
322 if ( idx !=
ToInt(i) )
324 BOOL r =
m_apPages[i]->IsWindowVisible();
328 m_apPages[i]->SendMessage(WM_ACTIVATE, WA_INACTIVE, 0);
332 m_apPages[idx]->SendMessage(WM_ACTIVATE, WA_ACTIVE, 0);
337 void m_ResizeAll(
void)
340 _super::GetWindowRect(&r);
341 _super::GetParent()->ScreenToClient(&r);
342 _super::AdjustRect(FALSE, &r);
345 m_apPages[i]->MoveWindow(r.left, r.top, r.Width(), r.Height());
348 BOOL GetItem(
int nItem, TCITEM* pTabCtrlItem)
const;
349 BOOL SetItem(
int nItem, TCITEM* pTabCtrlItem);
350 BOOL SetItemExtra(
int nBytes);
351 BOOL InsertItem(
int nItem);
352 void AdjustRect(BOOL bLarger, LPRECT lpRect);
353 void RemoveImage(
int nImage);
#define loop(VAR, CNT)
loop構文.
BOOL SetWindowPos(const CWnd *pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags)
[設定] ウィンドウサイズポジション設定.
HWND GetSafeHwnd(void) const
[取得] ウィンドウハンドル取得.
void RemoveAll(void)
[削除] 空化
size_t GetSize(void) const
[取得] サイズ取得
bool Remove(INDEX index)
[削除] 要素一つ削除.
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.
INDEX Add(const TYP &t)
[追加] 要素一つ追加.
int AddItem(LPCTSTR lpszName, CDialog *pWnd, UINT idd)
[追加] アイテム追加.
BOOL DeleteItem(int nItem)
[削除] アイテム削除.
virtual BOOL OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT *_pResult)
[通知] for notifications from parent
CWnd * GetWndItem(int nItem) const
[取得] ウィンドウ取得.
int AddItem(LPCTSTR lpszName, TYP *pWnd)
[追加] アイテム追加.
CSimpleVectorT< CWnd * > m_apPages
ページウィンドウ群
virtual void PreSubclassWindow(void)
[通知] subclassing/unsubclassing functions.
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
[通知] for processing Windows messages.
BOOL DeleteAllItems(void)
[削除] 全アイテム削除.
CWnd * GetWndCurSel(void) const
[取得] 選択ウィンドウ取得.
int FindItem(HWND page) const
[検索] アイテム検索.
int SetCurSel(HWND page)
[選択] タブ選択.
int GetCurSel(void) const
[取得] 選択アイテム取得.
int SetCurSel(int nItem)
[選択] タブ選択.
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).