用于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.
 
 
 
 
 
 

463 lines
13 KiB

#pragma once
#include "core/SWnd.h"
#include "SRichEdit.h"
#include "SDropDown.h"
namespace SOUI
{
#define IDC_CB_EDIT -100
#define IDC_DROPDOWN_LIST -200
/**
* @class SComboEdit
* @brief 在CommboBox中嵌入的Edit控件
*
* Describe
*/
class SOUI_EXP SComboEdit:public SEdit
{
public:
/**
* SComboEdit::SComboEdit
* @param SComboBoxBase *pOwner -- 暂无
* @brief 构造函数
*
* Describe 构造函数
*/
SComboEdit(SWindow *pOwner);
/**
* SComboEdit::~SComboEdit
* @brief 析构函数
*
* Describe 析构函数
*/
virtual ~SComboEdit();
protected:
/**
* SComboEdit::OnMouseHover
* @brief 键盘鼠标悬停事件
* @param WPARAM wParam
* @param CPoint ptPos -- 鼠标所在位置
*
* Describe 此函数是消息响应函数
*/
void OnMouseHover(WPARAM wParam, CPoint ptPos);
/**
* SComboEdit::OnMouseLeave
* @brief 键盘鼠标离开事件
*
* Describe 此函数是消息响应函数
*/
void OnMouseLeave();
/**
* SComboEdit::OnKeyDown
* @brief 键盘按下事件
* @param UINT nChar -- 按键对应的码值
* @param UINT nRepCnt -- 重复次数
* @param UINT nFlags -- 标志
*
* Describe 此函数是消息响应函数
*/
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
/**
* SComboEdit::FireEvent
* @brief 通知消息
* @param EventArgs & evt -- 事件对象
*
* Describe 此函数是消息响应函数
*/
virtual BOOL FireEvent(EventArgs & evt);
virtual void OnFinalRelease();
void OnKillFocus(SWND wndFocus);
SOUI_MSG_MAP_BEGIN()
MSG_WM_MOUSEHOVER(OnMouseHover)
MSG_WM_MOUSELEAVE(OnMouseLeave)
MSG_WM_KEYDOWN(OnKeyDown)
MSG_WM_KILLFOCUS_EX(OnKillFocus)
SOUI_MSG_MAP_END()
};
class SOUI_EXP SDropDownWnd_ComboBox : public SDropDownWnd
{
public:
SDropDownWnd_ComboBox(ISDropDownOwner* pOwner):SDropDownWnd(pOwner){}
virtual BOOL PreTranslateMessage(MSG* pMsg);
};
/**
* @class SComboBoxBase
* @brief 可输入CommboBox
*
* Describe 可输入下拉列表
*/
class SOUI_EXP SComboBase
: public SWindow
, public ISDropDownOwner
{
SOUI_CLASS_NAME(SComboBase,L"combobase")
public:
/**
* SComboBoxBase::SComboBoxBase
* @brief 构造函数
*
* Describe 构造函数
*/
SComboBase(void);
/**
* SComboBoxBase::~SComboBoxBase
* @brief 析构函数
*
* Describe 析构函数
*/
virtual ~SComboBase(void);
/**
* SComboBoxBase::GetCurSel
* @brief 获取选中值索引
* @return 返回int
*
* Describe 获取当前选中索引
*/
virtual int GetCurSel() const =0;
/**
* SComboBoxBase::GetCount
* @brief 获取下拉项个数
* @return 返回int
*
* Describe 获取下拉项个数
*/
virtual int GetCount() const =0;
/**
* SComboBoxBase::SetCurSel
* @brief 设置当前选中
* @param int iSel -- 选中索引
*
* Describe 设置当前选中
*/
virtual BOOL SetCurSel(int iSel)=0;
/**
* SComboBoxEx::GetTextRect
* @brief 获取文本位置
* @param LPRECT pRect -- 文本位置
*
* Describe 获取文本位置
*/
virtual SStringT GetWindowText(BOOL bRawText=FALSE);
virtual SStringT GetLBText(int iItem,BOOL bRawText=FALSE) =0;
/**
* SComboBoxBase::SetWindowText
* @brief 设置显示文本
* @param LPCTSTR pszText -- 文本
*
* Describe
*/
virtual void SetWindowText(LPCTSTR pszText);
/**
* FindString
* @brief 查找字符串位置
* @param LPCTSTR pszFind -- 查找目标
* @param int nAfter -- 开始位置
* @return int -- 目标索引,失败返回-1。
* Describe
*/
virtual int FindString(LPCTSTR pszFind,int nAfter=-1, BOOL bPartMatch=TRUE);
virtual CSize GetDesiredSize(int nParentWid, int nParentHei);
virtual void SetFocus();
/**
* SComboBoxBase::DropDown
* @brief 下拉事件
*
* Describe 下拉事件
*/
void DropDown();
/**
* SComboBoxBase::CloseUp
* @brief 下拉关闭
*
* Describe 下拉关闭
*/
void CloseUp();
bool IsDropdown() const;
void SetDropdown(bool bDropdown);
protected:
/**
* SComboBoxBase::GetDropDownOwner
* @brief 获取owner
* @return SWindow
*
* Describe 获取owner
*/
virtual SWindow* GetDropDownOwner();
/**
* SComboBoxBase::OnCreateDropDown
* @brief 下拉事件
* @param SDropDownWnd *pDropDown -- 下拉窗口指针
*
* Describe 下拉事件
*/
virtual void OnCreateDropDown(SDropDownWnd *pDropDown);
/**
* SComboBoxBase::OnDestroyDropDown
* @brief 下拉事件
* @param SDropDownWnd *pDropDown -- 下拉窗口指针
* @param UINT uCode -- 消息码
*
* Describe 下拉关闭
*/
virtual void OnDestroyDropDown(SDropDownWnd *pDropDown);
/**
* SComboBoxBase::OnSelChanged
* @brief 下拉窗口改变事件
*
* Describe 下拉关闭
*/
virtual void OnSelChanged();
virtual BOOL FireEvent(EventArgs &evt);
protected:
/**
* SComboBoxBase::CalcPopupRect
* @brief 计算弹出窗口位置
* @param int nHeight -- 下拉窗口高度
* @param CRect & rcPopup -- 保存弹出窗口Rect
* @return BOOL TRUE -- 成功 FALSE -- 失败
*
* Describe 计算弹出窗口位置,保存在rcPopup中
*/
BOOL CalcPopupRect(int nHeight,CRect & rcPopup);
/**
* SComboBoxBase::CreateListBox
* @brief 创建下拉列表
* @param pugi::xml_node xmlNode -- xml对象
* @return BOOL TRUE -- 成功 FALSE -- 失败
*
* Describe 创建下拉列表
*/
virtual BOOL CreateListBox(pugi::xml_node xmlNode)=0;
/**
* SComboBoxBase::GetListBoxHeight
* @brief 获取下拉列表高度
* @return 返回int 高度
*
* Describe 获取下拉列表高度
*/
virtual int GetListBoxHeight()=0;
/**
* SComboBoxBase::GetDropBtnRect
* @brief 获取下拉列表按钮位置
* @param LPRECT prc -- 按钮Rect
*
* Describe 获取下拉列表右侧按钮位置
*/
void GetDropBtnRect(LPRECT prc);
/**
* SComboBoxBase::LoadChildren
* @brief 加载子项
* @param pugi::xml_node xmlNode -- xml文件
* @return 返回BOOL TRUE -- 成功 FALSE -- 失败
*
* Describe 加载子项
*/
virtual BOOL CreateChildren(pugi::xml_node xmlNode);
/**
* SComboBoxBase::GetTextRect
* @brief 获取文本位置
* @param LPRECT pRect -- 文本位置
*
* Describe 获取文本位置
*/
virtual void GetTextRect(LPRECT pRect);
virtual void OnColorize(COLORREF cr);
virtual HRESULT OnLanguageChanged();
virtual void OnScaleChanged(int nScale);
/**
* SComboBoxBase::OnPaint
* @brief 绘制消息
* @param IRenderTarget * pRT -- 暂无
*
* Describe 此函数是消息响应函数
*/
void OnPaint(IRenderTarget * pRT);
/**
* SComboBoxBase::OnLButtonDown
* @brief 左键按下事件
* @param UINT nFlags -- 标志
* @param CPoint point -- 鼠标坐标
*
* Describe 此函数是消息响应函数
*/
void OnLButtonDown(UINT nFlags,CPoint pt);
/**
* SComboBoxBase::OnMouseMove
* @brief 键盘鼠标移动事件
* @param UINT nFlags -- 标志
* @param CPoint point -- 鼠标坐标
*
* Describe 此函数是消息响应函数
*/
void OnMouseMove(UINT nFlags,CPoint pt);
/**
* SComboBoxBase::OnMouseLeave
* @brief 键盘鼠标移动事件
*
* Describe 此函数是消息响应函数
*/
void OnMouseLeave();
/**
* SComboBoxBase::OnKeyDown
* @brief 键盘按下事件
* @param UINT nChar -- 按键对应的码值
* @param UINT nRepCnt -- 重复次数
* @param UINT nFlags -- 标志
*
* Describe 此函数是消息响应函数
*/
void OnKeyDown( TCHAR nChar, UINT nRepCnt, UINT nFlags );
BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
/**
* SComboBoxBase::OnChar
* @brief 字符消息
* @param UINT nChar -- 按键对应的码值
* @param UINT nRepCnt -- 重复次数
* @param UINT nFlags -- 标志
*
* Describe 此函数是消息响应函数
*/
void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
/**
* SComboBoxBase::OnDestroy
* @brief 下拉窗口销毁
*
* Describe 此函数是用于销毁下拉窗口
*/
void OnDestroy();
/**
* SComboBoxBase::OnGetDlgCode
* @brief 获取消息码
*
* Describe 获取消息码
*/
UINT OnGetDlgCode();
/**
* SComboBoxBase::IsFocusable
* @brief 是否禁止TAB键
*
* Describe 是否禁止TAB键
*/
BOOL IsFocusable();
void UpdateChildrenPosition();
void OnKillFocus(SWND wndFocus);
HRESULT OnAttrDropDown(const SStringW & strValue, BOOL bLoading);
SStringT GetCueText(BOOL bRawText=FALSE) const;
SOUI_ATTRS_BEGIN()
ATTR_CUSTOM(L"dropDown", OnAttrDropDown)
ATTR_LAYOUTSIZE(L"dropHeight", m_nDropHeight, TRUE)
ATTR_INT(L"curSel", m_iInitSel, FALSE)
ATTR_SKIN(L"btnSkin", m_pSkinBtn, TRUE)
ATTR_INT(L"animateTime", m_nAnimTime, FALSE)
ATTR_INT(L"autoFitDropBtn", m_bAutoFitDropBtn, TRUE)
ATTR_COLOR(L"cueColor",m_crCue,TRUE)
ATTR_I18NSTRT(L"cueText",m_strCue,TRUE)
ATTR_BOOL(L"autoMatch",m_bAutoMatch,FALSE)
SOUI_ATTRS_END()
SOUI_MSG_MAP_BEGIN()
MSG_WM_PAINT_EX(OnPaint)
MSG_WM_LBUTTONDOWN(OnLButtonDown)
MSG_WM_MOUSEMOVE(OnMouseMove)
MSG_WM_MOUSELEAVE(OnMouseLeave)
MSG_WM_MOUSEWHEEL(OnMouseWheel)
MSG_WM_KEYDOWN(OnKeyDown)
MSG_WM_CHAR(OnChar)
MSG_WM_DESTROY(OnDestroy)
MSG_WM_KILLFOCUS_EX(OnKillFocus)
SOUI_MSG_MAP_END()
protected:
/**
* SComboBoxBase::GetEditText
* @brief 获取编辑框内容
*
* Describe 获取编辑框内容
*/
SStringT GetEditText() const
{
if(!m_bDropdown)
{
return m_pEdit->GetWindowText();
}
else
{
return SStringT();
}
}
SRichEdit *m_pEdit; /**< SRichEdit指针 */
DWORD m_dwBtnState; /**< 按钮状态 */
SAutoRefPtr<ISkinObj> m_pSkinBtn; /**< 按钮资源 */
bool m_bDropdown; /**< Editable or dropdown only */
SLayoutSize m_nDropHeight; /**< 下拉框高度 */
int m_nAnimTime; /**< 动画时间 */
int m_iInitSel; /**< 默认选中索引 */
SDropDownWnd *m_pDropDownWnd; /**< DropDown指针 */
pugi::xml_document m_xmlDropdownStyle;/**< DropDown的style */
BOOL m_bAutoFitDropBtn; /**< 自适应下拉按钮大小*/
COLORREF m_crCue;
STrText m_strCue;
SStringT m_strMatch; /*快速输入用来定位下拉列表中的项*/
DWORD m_LastPressTime; /*最后按键的时间,*/
BOOL m_bAutoMatch;
int m_nTextLength;
};
}