70 lines
2.2 KiB
C++
70 lines
2.2 KiB
C++
// SearchBarDlg.h - 浮动搜索工具栏
|
|
#pragma once
|
|
#include "Resource.h"
|
|
#include "LangManager.h"
|
|
#include "CIconButton.h"
|
|
#include <vector>
|
|
|
|
class CMy2015RemoteDlg;
|
|
|
|
class CSearchBarDlg : public CDialogLangEx
|
|
{
|
|
DECLARE_DYNAMIC(CSearchBarDlg)
|
|
|
|
public:
|
|
CSearchBarDlg(CMy2015RemoteDlg* pParent = nullptr);
|
|
virtual ~CSearchBarDlg();
|
|
|
|
enum { IDD = IDD_SEARCH_BAR };
|
|
|
|
CMy2015RemoteDlg* m_pParent;
|
|
|
|
// 控件
|
|
CEdit m_editSearch;
|
|
CIconButton m_btnPrev;
|
|
CIconButton m_btnNext;
|
|
CIconButton m_btnClose;
|
|
CStatic m_staticCount;
|
|
CToolTipCtrl m_tooltip;
|
|
|
|
// 搜索状态
|
|
std::vector<uint64_t> m_Results; // 匹配项的 clientID(而非索引,避免列表变化导致失效)
|
|
int m_nCurrentIndex; // 当前高亮的结果索引
|
|
CString m_strLastSearch; // 上次搜索文本
|
|
|
|
int FindListIndexByClientID(uint64_t clientID); // 根据 clientID 查找当前列表索引
|
|
|
|
// 方法
|
|
void Show(); // 显示搜索栏
|
|
void Hide(); // 隐藏搜索栏
|
|
void DoSearch(); // 执行搜索
|
|
void InvalidateCache(); // 清空搜索缓存(Tab切换时调用)
|
|
void GotoPrev(); // 上一个结果
|
|
void GotoNext(); // 下一个结果
|
|
void GotoResult(int index); // 跳转到指定结果
|
|
void UpdateCountText(); // 更新计数显示
|
|
void UpdatePosition(); // 更新位置(居中于父窗口)
|
|
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX);
|
|
virtual BOOL OnInitDialog();
|
|
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
public:
|
|
afx_msg void OnBnClickedPrev();
|
|
afx_msg void OnBnClickedNext();
|
|
afx_msg void OnBnClickedClose();
|
|
afx_msg void OnEnChangeSearch();
|
|
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
|
|
|
|
static const UINT_PTR TIMER_SEARCH = 1; // 延迟搜索定时器
|
|
static const UINT SEARCH_DELAY_MS = 500; // 延迟时间(毫秒)
|
|
|
|
private:
|
|
CBrush m_brushEdit; // 输入框背景画刷
|
|
CBrush m_brushStatic; // 静态控件背景画刷
|
|
};
|