#pragma once #include #include #include enum class ThemeType { Light, // dzɫÖ÷Ìâ Dark // ÉîÉ«Ö÷Ìâ }; struct Theme { COLORREF backgroundColor; COLORREF textColor; COLORREF buttonColor; COLORREF borderColor; }; class CBaseDlg : public CDialogEx { DECLARE_DYNAMIC(CBaseDlg) public: CBaseDlg(UINT nID, CWnd* pPage); // ±ê×¼¹¹Ô캯Êý virtual ~CBaseDlg(); // Îö¹¹º¯Êý public: virtual BOOL PreAdjustControl(CWnd* pWnd); // Ö÷Ìâ¹ÜÀí void SwitchTheme(ThemeType enThemeType); // Çл»Ö÷Ìâ // ×ÊÔ´¹ÜÀí void LoadResourceLibrary(const CString& strLanguage); // ¼ÓÔØ×ÊÔ´¿â void UnloadResourceLibrary(); // Ð¶ÔØ×ÊÔ´¿â // ×ÖÌå¹ÜÀí CFont* GetOrCreateFont(int nFontSize); // »ñÈ¡»ò´´½¨×ÖÌå void SetDefaultFont(); // ÉèÖÃĬÈÏ×ÖÌå // ¶¯Ì¬¿Ø¼þ¹ÜÀí BOOL AddControl(UINT nCtrlID, CWnd* pControl); // Ìí¼Ó¿Ø¼þ BOOL RemoveControl(UINT nCtrlID); // ÒÆ³ý¿Ø¼þ BOOL UpdateControlText(UINT nCtrlID, const CString& strText); // ¸üпؼþÎı¾ CWnd* GetControl(UINT nCtrlID); // »ñÈ¡¿Ø¼þ private: void AdjustControls(float dScaleX, float dScaleY); // µ÷Õû¿Ø¼þ´óС void AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight); // µ÷Õû¿Ø¼þ×ÖÌå private: UINT m_nID; // ¶Ô»°¿òID CWnd* m_pParent; // ¸¸´°¿Ú HBRUSH m_hBrush; bool m_bResizing; // ¿Ø¼þÊÇ·ñÕýÔÚµ÷Õû´óС int m_nInitialWidth; // ¶Ô»°¿ò³õʼ¿í¶È int m_nInitialHeight; // ¶Ô»°¿ò³õʼ¸ß¶È std::unordered_map m_mapCtrlLayouts; // ¿Ø¼þ²¼¾Ö std::map> m_mapControls; // ¿Ø¼þ¼¯ºÏ std::unordered_map> m_mapFonts; // ¿Ø¼þ×ÖÌå DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); };