#pragma once
|
#include <memory>
|
#include <unordered_map>
|
|
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(); // Îö¹¹º¯Êý
|
|
// Ö÷Ìâ¹ÜÀí
|
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; // ¸¸´°¿Ú
|
bool m_bResizing; // ¿Ø¼þÊÇ·ñÕýÔÚµ÷Õû´óС
|
int m_nInitialWidth; // ¶Ô»°¿ò³õʼ¿í¶È
|
int m_nInitialHeight; // ¶Ô»°¿ò³õʼ¸ß¶È
|
std::unordered_map<int, CRect> m_mapCtrlLayouts; // ¿Ø¼þ²¼¾Ö
|
std::map<UINT, std::unique_ptr<CWnd>> m_mapControls; // ¿Ø¼þ¼¯ºÏ
|
std::unordered_map<int, std::shared_ptr<CFont>> 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);
|
};
|