355 lines
10 KiB
C++
355 lines
10 KiB
C++
#ifndef UI_UTILS_WINIMPLBASE_H_
|
||
#define UI_UTILS_WINIMPLBASE_H_
|
||
|
||
#pragma once
|
||
|
||
namespace ui
|
||
{
|
||
|
||
#define UI_WNDSTYLE_FRAME (WS_VISIBLE | WS_OVERLAPPEDWINDOW)
|
||
#define UI_WNDSTYLE_DIALOG (WS_VISIBLE | WS_POPUPWINDOW | WS_CAPTION | WS_DLGFRAME | WS_CLIPSIBLINGS | WS_CLIPCHILDREN)
|
||
|
||
#define UI_CLASSSTYLE_FRAME (CS_VREDRAW | CS_HREDRAW)
|
||
#define UI_CLASSSTYLE_DIALOG (CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS | CS_SAVEBITS)
|
||
|
||
#ifndef WM_DPICHANGED
|
||
#define WM_DPICHANGED 0x02E0
|
||
#endif
|
||
|
||
class UILIB_API WindowImplBase : public Window, public IUIMessageFilter
|
||
{
|
||
public:
|
||
WindowImplBase();
|
||
virtual ~WindowImplBase();
|
||
|
||
/**
|
||
* @brief 当接收到窗口创建消息时被调用
|
||
* @return 无
|
||
*/
|
||
virtual void InitWindow(){}
|
||
|
||
/**
|
||
* @brief 当接收到窗口销毁消息时被调用
|
||
* @param[in] hWnd 要销毁的窗口句柄
|
||
* @return 无
|
||
*/
|
||
virtual void OnFinalMessage( HWND hWnd ) override;
|
||
|
||
/**
|
||
* @brief 获取窗口样式
|
||
* @return 返回窗口样式
|
||
*/
|
||
virtual LONG GetStyle();
|
||
|
||
/**
|
||
* @brief 获取窗口类样式
|
||
* @return 返回窗口类样式
|
||
*/
|
||
virtual UINT GetClassStyle() const;
|
||
|
||
/**
|
||
* @brief 待补充
|
||
* @param[in] 待补充
|
||
* @return 待补充
|
||
*/
|
||
virtual std::wstring GetResourceID() const;
|
||
|
||
/**
|
||
* @brief 当要创建的控件不是标准的控件名称时会调用该函数
|
||
* @param[in] pstrClass 控件名称
|
||
* @return 返回一个自定义控件指针,一般情况下根据 pstrClass 参数创建自定义的控件
|
||
*/
|
||
virtual Control* CreateControl(const std::wstring& pstrClass);
|
||
|
||
/**
|
||
* @brief 接收所有消息
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当收到窗口关闭消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当收到窗口被销毁消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当收到活动或非活动状态消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当收到要计算客户区域大小消息时(WM_NCCALCSIZE)被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 窗口位置或 Z 次序发生改变时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到绘制标题栏区域消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到标题栏区域双击消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnNcLButtonDbClick(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到 WM_NCHITTEST 消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到 WM_GETMINMAXINFO 消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到鼠标悬浮消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnMouseWheel(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到窗口大小改变消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnMouseHover(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到DPI改变消息时被调用(只有在 Startup 中指定启用 DPI 适配后才会触发)
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnDpiChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到窗口大小改变消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 当接收到字符按键消息时(WM_CHAR)被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnChar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 接收窗口控制命令消息时(WM_SYSCOMMAND)被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 接收键盘按键按下消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 接收失去焦点消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 接收获取焦点消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 接收到鼠标左键按下消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 接收到鼠标左键弹起消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 接收到鼠标移动消息时被调用
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 窗口消息的派发函数
|
||
* @param[in] uMsg 消息内容
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 返回 true 则继续派发该消息,否则不再派发该消息
|
||
* @return 返回消息处理结果
|
||
*/
|
||
virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) override;
|
||
|
||
public:
|
||
/**
|
||
* @brief 激活窗口
|
||
* @return void 无返回值
|
||
*/
|
||
virtual void ActiveWindow();
|
||
|
||
/**
|
||
* @brief 设置窗口标题
|
||
* @param[in] title 窗口标题
|
||
* @return void 无返回值
|
||
*/
|
||
virtual void SetTaskbarTitle(const std::wstring &title);
|
||
|
||
/**
|
||
* @brief 置顶窗口
|
||
* @param[in] forever 是否一直置顶
|
||
* @return void 无返回值
|
||
*/
|
||
void ToTopMost(bool forever);
|
||
|
||
protected:
|
||
/**
|
||
* @brief 创建窗口时被调用,由子类实现用以获取窗口皮肤目录
|
||
* @return 子类需实现并返回窗口皮肤目录
|
||
*/
|
||
virtual std::wstring GetSkinFolder() = 0;
|
||
|
||
/**
|
||
* @brief 创建窗口时被调用,由子类实现用以获取窗口皮肤 XML 描述文件
|
||
* @return 子类需实现并返回窗口皮肤 XML 描述文件
|
||
*/
|
||
virtual std::wstring GetSkinFile() = 0;
|
||
|
||
/**
|
||
* @brief 创建窗口时被调用,由子类实现用以获取窗口唯一的类名称
|
||
* @return 子类需实现并返回窗口唯一的类名称
|
||
*/
|
||
virtual std::wstring GetWindowClassName(void) const = 0 ;
|
||
|
||
private:
|
||
/**
|
||
* @brief 收到窗口创建消息时被调用,请使用 InitWindow 接口来实现自定义需求
|
||
* @param[in] uMsg 消息ID
|
||
* @param[in] wParam 消息附加参数
|
||
* @param[in] lParam 消息附加参数
|
||
* @param[out] bHandled 消息是否已经被处理
|
||
* @return 返回消息处理结果
|
||
*/
|
||
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||
|
||
/**
|
||
* @brief 窗口功能按钮被点击时调用
|
||
* @param[in] param 携带的参数
|
||
* @return 始终返回 true
|
||
*/
|
||
bool OnButtonClick(EventArgs* param);
|
||
};
|
||
|
||
}
|
||
|
||
#endif // UI_UTILS_WINIMPLBASE_H_
|