📄 tabdialogsctrl.cpp
字号:
/* * * tabdialogsctrl.cpp * Copyright (C) 2006 Michael H. Overlin This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact at poster_printer@yahoo.com * */#include "tabdialogsctrl.h"#include "dialogwindow.h"#include "mathutils.h"#include <windows.h>#include <commctrl.h>#define IDC_TAB 100static const TCHAR gatstrTabDialgCtrlClassName[] = TABDIALOGCTRL_CLASSNAME;// ** // ** public:// **TabDialogsCtrl::TabDialogsCtrl(HINSTANCE hinst, HWND hwnd) : Window(hinst, hwnd) { m_hwndTabCtrl = this->CreateChildWindowEx( 0, WC_TABCONTROL, TEXT(""), WS_CHILD | WS_VISIBLE, 0, 0, RW(this->rClient()), RH(this->rClient()), (HMENU) IDC_TAB, NULL ); }TabDialogsCtrl::~TabDialogsCtrl() {}void TabDialogsCtrl::SetDialogs(IN const std::vector<TabSpec> & vts) { ClearDialogs(); if (vts.size() != 0) { for(uint k = 0; k < vts.size(); ++k) { DialogWindow *pdw = vts[k].pdw; pdw->DoCreateDialog(this); pdw->ShowWindow(SW_HIDE); } for(uint k = 0; k < vts.size(); ++k) { DialogWindow *pdw = vts[k].pdw; LPTSTR lptstrTabText = (LPTSTR) vts[k].tstrTab.c_str(); TCITEM tci; tci.mask = TCIF_TEXT | TCIF_PARAM; tci.pszText = lptstrTabText; tci.lParam = (LPARAM) pdw; TabCtrl_InsertItem(m_hwndTabCtrl, k, &tci); } RECT rTabWindow; GetWindowRect(m_hwndTabCtrl, &rTabWindow); this->ScreenToClient(rTabWindow); RECT rTabDisplay = rTabWindow; TabCtrl_AdjustRect(m_hwndTabCtrl, FALSE, &rTabDisplay); for(uint k = 0; k < vts.size(); ++k) { DialogWindow *pdw = vts[k].pdw; RECT rDlg; pdw->GetWindowRect(rDlg); CenterInRect(rDlg, rTabDisplay); pdw->SetWindowTopLeft(rDlg.left, rDlg.top); } // SIMULATE SELECTION CHANGE NMHDR nmh; nmh.code = TCN_SELCHANGE; nmh.idFrom = ::GetDlgCtrlID(m_hwndTabCtrl); nmh.hwndFrom = m_hwndTabCtrl; this->SendMessage(WM_NOTIFY, (WPARAM) nmh.idFrom, (LPARAM) &nmh); //TabCtrl_SetCurSel(m_hwndTabCtrl, 0); }}uint TabDialogsCtrl::GetDialogCount(void) const { uint uiRetValue = TabCtrl_GetItemCount(m_hwndTabCtrl); return uiRetValue;}DialogWindow* TabDialogsCtrl::GetDialog(uint k) { ::TCITEM tci; tci.mask = TCIF_PARAM; TabCtrl_GetItem(m_hwndTabCtrl, k, &tci); DialogWindow *pdw = (DialogWindow*) tci.lParam; return pdw;}BOOL TabDialogsCtrl::HasCurSel(void) const { int iCurSel = TabCtrl_GetCurSel(m_hwndTabCtrl); return (iCurSel != -1);}uint TabDialogsCtrl::GetCurSel(void) const { int iCurSel = TabCtrl_GetCurSel(m_hwndTabCtrl); ASSERT(iCurSel != -1); return (uint) iCurSel;}LPCTSTR TabDialogsCtrl::TheirGetWindowClassName(void) { return gatstrTabDialgCtrlClassName;}// ** // ** protected: // **void TabDialogsCtrl::ClearDialogs(void) { uint nDialogs = this->GetDialogCount(); for(uint k = 0; k < nDialogs; ++k) { DialogWindow *pdw = this->GetDialog(k); pdw->DestroyWindow(); } TabCtrl_DeleteAllItems(m_hwndTabCtrl);}void TabDialogsCtrl::HideAllDialogs(void) { uint nDialogs = this->GetDialogCount(); for(uint k = 0; k < nDialogs; ++k) { DialogWindow *pdw = this->GetDialog(k); pdw->ShowWindow(SW_HIDE); }}//void TabDialogsCtrl::CursorMsg(OUT MSGRESULT& mr, UINT msg, WPARAM wParam, LPARAM lParam) {//}////void TabDialogsCtrl::MouseMsg(OUT MSGRESULT& mr, UINT msg, WPARAM wParam, LPARAM lParam) {//}//void TabDialogsCtrl::NotifyMsg(OUT MSGRESULT& mr, WPARAM wParam, LPARAM lParam) { mr.bProcessed = FALSE; int idCtrl = (int) wParam; switch(idCtrl) { case IDC_TAB: { LPNMHDR lpnmh = (LPNMHDR) lParam; UINT uiCode = lpnmh->code; switch(uiCode) { case TCN_SELCHANGE: { if (this->HasCurSel()) { uint uiSel = this->GetCurSel(); DialogWindow *pdw = this->GetDialog(uiSel); //HideAllDialogs(); pdw->ShowWindow(SW_SHOW); mr.bProcessed = TRUE; // 6/1 this->SendNotification(TabDialogsCtrl::eDialogChanged); } } break; case TCN_SELCHANGING: { if (this->HasCurSel()) { uint uiSel = this->GetCurSel(); DialogWindow *pdw = this->GetDialog(uiSel); pdw->ShowWindow(SW_HIDE); mr.bProcessed = TRUE; } } break; default: break; } } break; default: break; }}//void TabDialogsCtrl::Paint(OUT MSGRESULT& mr) {//}//// 7/3LRESULT TabDialogsCtrl::WindowProc(UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_SETFONT: ::SendMessage(m_hwndTabCtrl, msg, wParam, lParam); break; } LRESULT lresRetValue = Window::WindowProc(msg, wParam, lParam); return lresRetValue;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -