用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

237 lines
7.9 KiB

/**
* Copyright (C) 2014-2050 SOUI团队
* All rights reserved.
*
* @file SDropDown.h
* @brief 一个通用的下拉窗口模块
* @version v1.0
* @author soui
* @date 2014-05-25
*
* Describe 此类是下拉窗口的父类 只需要派生该类即可
* 该窗口禁止激活,因此正常情况下收不到键盘及鼠标事件
* 为了收到键盘消息,我们实现一个PreTranslateMessage函数,对键盘消息进行转发。
* 为了接收鼠标消息,我们在窗口显示后调用SetCapture来截获鼠标消息。SetCapture会有一个副作用,
* 窗口中将收不到WM_SETCURSOR消息,因此在PreTranslateMessage函数中通过WM_MOUSEMOVE消息来模拟WM_SETCURSOR
*/
#pragma once
#include "core/shostwnd.h"
namespace SOUI
{
class SDropDownWnd;
/**
* @struct ISDropDownOwner
* @brief ISDropDownOwner接口类
*
* Describe 下拉窗口接口类 里面只定义一些虚函数
*/
struct ISDropDownOwner
{
/**
* ISDropDownOwner::GetDropDownOwner
* @brief 获得下拉窗口所属者
*
* Describe 此函数是纯虚函数
*/
virtual SWindow * GetDropDownOwner() =0;
/**
* ISDropDownOwner::OnCreateDropDown
* @brief 下拉窗口创建完成
*
* Describe 此函数是纯虚函数
*/
virtual void OnCreateDropDown(SDropDownWnd *pDropDown) = 0;
/**
* ISDropDownOwner::OnDestroyDropDown
* @brief 下拉窗口被销毁
*
* Describe 此函数是纯虚函数
*/
virtual void OnDestroyDropDown(SDropDownWnd *pDropDown) = 0;
};
/**
* @class SDropDownWnd
* @brief 下拉窗口类
*
* Describe 下拉窗口类 只需要继承此类即可
*/
class SOUI_EXP SDropDownWnd : public SHostWnd, public IMessageFilter
{
public:
/**
* SDropDownWnd::SDropDownWnd
* @brief 构造函数
* @param ISDropDownOwner* pOwner -- 所属者指针
*
* Describe SDropDownWnd类的构造函数
*/
SDropDownWnd(ISDropDownOwner* pOwner);
/**
* SDropDownWnd::~SDropDownWnd
* @brief 析构函数
*
* Describe SDropDownWnd类的析构函数
*/
virtual ~SDropDownWnd();
SWindow * GetDropDownOwner();
/**
* SDropDownWnd::Create
* @brief 下拉窗口创建函数
* @param LPCRECT lpRect -- 下拉窗口大小
* @param LPVOID lParam -- 与下拉窗口关联的数据
* @param DWORD dwStyle -- 下拉窗口样式
* @param DWORD dwExStyle -- 下拉窗口扩展样式
*
* Describe 此函数是虚函数,用于指定下拉窗口相关属性。比如样式,大小等
*/
virtual BOOL Create(LPCRECT lpRect,LPVOID lParam,DWORD dwStyle=WS_POPUP,DWORD dwExStyle=WS_EX_TOOLWINDOW|WS_EX_TOPMOST);
/**
* SDropDownWnd::EndDropDown
* @brief 下拉窗口销毁
* @param UINT uCode -- 消息码 默认是IDCANCEL
*
* Describe 此函数是用于销毁下拉窗口(注释可能不对 请大家指点)
*/
void EndDropDown(UINT uCode=IDCANCEL);
//返回退出代码
UINT GetExitCode() const {return m_uExitCode;}
//返回下拉列表的状态值,由派生类提供。
virtual int GetValue() const {return 0;}
protected:
virtual SMessageLoop * GetMsgLoop();
/**
* OnReleaseSwndCapture
* @brief 阻止窗口的ReleaseCapture
* @return BOOL
*
* Describe 调用ReleaseCapture后重新调用SetCapture
*/
virtual BOOL OnReleaseSwndCapture();
/**
* PreTranslateMessage
* @brief
* @param MSG * pMsg -- 当前窗口消息
* @return BOOL-- TRUE消息被处理,不再分发。
*
* Describe
*/
virtual BOOL PreTranslateMessage(MSG* pMsg);
/**
* SDropDownWnd::OnLButtonDown
* @brief 下拉窗口鼠标左键按下事件
* @param UINT nFlags -- 标志
* @param CPoint point -- 鼠标坐标
*
* Describe 此函数是消息响应函数
*/
void OnLButtonDown(UINT nFlags, CPoint point);
/**
* SDropDownWnd::OnLButtonDown
* @brief 下拉窗口鼠标左键抬起事件
* @param UINT nFlags -- 标志
* @param CPoint point -- 鼠标坐标
*
* Describe 此函数是消息响应函数
*/
void OnLButtonUp(UINT nFlags, CPoint point);
/**
* SDropDownWnd::OnKeyDown
* @brief 键盘按下事件
* @param UINT nChar -- 按键对应的码值
* @param UINT nRepCnt -- 重复次数
* @param UINT nFlags -- 标志
*
* Describe 此函数是消息响应函数
*/
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
/**
* SDropDownWnd::OnKillFocus
* @brief 下拉窗口失去焦点消息响应函数
* @param HWND wndFocus -- 获得焦点窗口句柄
*
* Describe 下拉窗口失去焦点时候调用此函数,参数是获得焦点的窗口句柄
*/
void OnKillFocus(HWND wndFocus);
/**
* SDropDownWnd::OnDestroy
* @brief 下拉窗口销毁
*
* Describe 此函数是用于销毁下拉窗口
*/
void OnDestroy();
/**
* SDropDownWnd::OnActivateApp
* @brief 下拉窗口激活或者停止
* @param BOOL bActive -- 窗口激活标志
* @param DWORD dwThreadID -- 线程ID
*
* Describe 当下拉窗口激活时候调用此函数。详细说明,请查看MSDN
*/
void OnActivateApp(BOOL bActive, DWORD dwThreadID);
/**
* SDropDownWnd::OnMouseActivate
* @brief 鼠标点击窗口使窗口活动
* @param HWND wndTopLevel -- 顶级窗口
* @param UINT nHitTest -- 指定命中测试区号
* @param UINT message -- 鼠标消息码
*
* Describe 当光标在无效窗口时,并且用户按下鼠标按钮调用此函数
* 详细说明,请查看MSDN
*/
int OnMouseActivate(HWND wndTopLevel, UINT nHitTest, UINT message);
/**
* SDropDownWnd::OnActivate
* @brief 下拉窗口销毁
* @param UINT nState -- 激活类型
* @param BOOL bMinimized -- 最小化标志
* @param HWND wndOther -- 原活动窗口
*
* Describe
* 详细说明,请查看MSDN
*/
void OnActivate(UINT nState, BOOL bMinimized, HWND wndOther){}//中断消息处理,防止设置焦点
virtual void OnFinalMessage(HWND);
protected:
ISDropDownOwner* m_pOwner; /**< 窗口所属者 */
BOOL m_bClick; /**< 单击状态 */
UINT m_uExitCode; /**< 退出消息码 */
BEGIN_MSG_MAP_EX(SDropDownWnd)
MSG_WM_LBUTTONDOWN(OnLButtonDown)
MSG_WM_LBUTTONUP(OnLButtonUp)
MSG_WM_KEYDOWN(OnKeyDown);
MSG_WM_KILLFOCUS(OnKillFocus)
MSG_WM_DESTROY(OnDestroy)
MSG_WM_ACTIVATE(OnActivate)
MSG_WM_ACTIVATEAPP(OnActivateApp)
MSG_WM_MOUSEACTIVATE(OnMouseActivate)
CHAIN_MSG_MAP(SHostWnd)
END_MSG_MAP()
};
}//end of namespace SOUI