1 //这是用于Tab标签中的子对话框类 2 #include "BaseDialog.h" 3 4 #pragma once 5 class CTabDlg : public CBaseDialog 6 { 7 DECLARE_DYNAMIC(CTabDlg) 8 public: 9 CTabDlg(UINT nIDTemplate, CWnd *pParent = NULL); 10 ~CTabDlg(); 11 12 // 当标签切换到当前窗口时被调用 OnTabEntered()13 virtual void OnTabEntered() {} 14 // 当标签切换到当前窗口以外的窗口时被调用 OnTabExited()15 virtual void OnTabExited() {} 16 // 需要从界面获取数据时被调用 GetDataFromUi()17 virtual void GetDataFromUi() {} 18 // 需要从数据更新界面时被调用 ApplyDataToUi()19 virtual void ApplyDataToUi() {} 20 21 CWnd* GetParentWindow(); 22 23 // 如果此标签页子窗口需要滚动那么父窗口需要调用此方法设置滚动信息并保证在父窗口OnSize后重新调用 24 void SetScrollbarInfo(int nPage, int nMax); 25 26 private: 27 void ScrollWindowSimple(int step, bool absolute = false); 28 29 bool m_scroll_enable{ false }; 30 int m_last_pos{}; 31 32 protected: 33 // 从CBaseDialog继承并阻止派生类继承,标签页由父窗口管理,不使用CBaseDialog提供的此功能 GetDialogName()34 virtual CString GetDialogName() const override final { return CString(); }; IsRememberDialogSizeEnable()35 virtual bool IsRememberDialogSizeEnable() const override final { return false; }; 36 37 // CWnd的虚方法,声明在afxwin.h,实现在wincore.cpp,在WM_SIZE消息处理时被CWnd调用 38 // 内部在一些判断之后使用CWnd持有的CMFCDynamicLayout指针执行m_pDynamicLayout->Adjust() 39 virtual void ResizeDynamicLayout() override final; // 这里重写是为了改变调用时机,从默认的窗口OnSize之前改为父窗口OnSize之后 40 41 DECLARE_MESSAGE_MAP() 42 public: 43 virtual BOOL OnInitDialog(); 44 virtual BOOL PreTranslateMessage(MSG* pMsg); 45 virtual void OnOK(); 46 afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); 47 afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); 48 }; 49