#ifndef UI_UTILS_DPIMANAGER_H_ #define UI_UTILS_DPIMANAGER_H_ #pragma once namespace ui { /** @class DpiManager * @brief DPI适配管理类 * @copyright (c) 2016, NetEase Inc. All rights reserved * @author Redrain * @date 2016/10/10 */ class UILIB_API DpiManager { public: static DpiManager* GetInstance(); /** * @brief 获取系统DPI,开启DPI感知后有效 * @return UINT DPI */ static UINT GetSystemDPI(); /** * @brief 获取某个显示器的DPI,开启DPI感知后有效 * @param[in] HMONITOR句柄 * @return UINT DPI */ static UINT GetMonitorDPI(HMONITOR hMonitor); /** * @brief 获取主显示器DPI,开启DPI感知后有效 * @return UINT DPI */ static UINT GetMainMonitorDPI(); /** * @brief 从注册表获取DPI,不开启DPI感知也有效 * @return UINT DPI */ static UINT GetDPIFromRegistry(); /** * @brief 是否程序自己适配DPI缩放效果 * @return bool true 是,false 否 */ bool IsAdaptDPI(); /** * @brief 设置是否程序自己适配DPI缩放,默认不自己适配 * @return bool true 设置成功,false 设置失败 */ bool SetAdaptDPI(); /** * @brief 获取当前界面缩放比 * @return UINT 缩放比 */ UINT GetScale(); /** * @brief 根据DPI值设置界面缩放比,只有程序自己处理DPI缩放时才有效 * @param[in] uDPI DPI值 * @return void 无返回值 */ void SetScale(UINT uDPI); /** * @brief 根据界面缩放比来缩放整数,只有程序自己处理DPI缩放时才有效 * @param[in] iValue 整数 * @return int 缩放后的值 */ int ScaleInt(int &iValue); /** * @brief 根据界面缩放比来缩放SIZE,只有程序自己处理DPI缩放时才有效 * @param[in] pSize SIZE指针 * @return void 无返回值 */ void ScaleSize(SIZE &size); void ScaleSize(CSize &size); /** * @brief 根据界面缩放比来缩放POINT,只有程序自己处理DPI缩放时才有效 * @param[in] pSize SIZE指针 * @return void 无返回值 */ void ScalePoint(POINT &point); void ScalePoint(CPoint &point); /** * @brief 根据界面缩放比来缩放RECT,只有程序自己处理DPI缩放时才有效 * @param[in] pSize SIZE指针 * @return void 无返回值 */ void ScaleRect(RECT &rect); void ScaleRect(UiRect &rect); private: DpiManager(); ~DpiManager() {}; DpiManager(const DpiManager&) = delete; DpiManager& operator = (const DpiManager&) = delete; private: int m_nScaleFactor; bool m_bAdaptDPI; }; } #endif //UI_UTILS_DPIMANAGER_H_