2026-10-04 00:04:20 +08:00
|
|
|
#include "stdafx.h"
|
2026-09-28 15:28:50 +08:00
|
|
|
#include "CmdQueryDlg.h"
|
|
|
|
|
#include "CmdQuery.h"
|
|
|
|
|
#include <sstream>
|
|
|
|
|
#include <iomanip>
|
|
|
|
|
#include <stack>
|
|
|
|
|
#include "CoreTools.h"
|
|
|
|
|
#include "CmdQueryHotkeyDlg.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(CmdQueryDlg, CDialog)
|
|
|
|
|
|
|
|
|
|
CmdQueryDlg::CmdQueryDlg(CWnd* pParent)
|
|
|
|
|
: CDialog(IDD_CMD_QUERY_DLG, pParent) { }
|
|
|
|
|
|
|
|
|
|
CmdQueryDlg::~CmdQueryDlg() { }
|
|
|
|
|
|
|
|
|
|
void CmdQueryDlg::initShow()
|
|
|
|
|
{
|
|
|
|
|
m_searchCombo.SetFocus();
|
|
|
|
|
m_searchCombo.SetWindowText(_T(""));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CmdQueryDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
|
|
{
|
|
|
|
|
CDialog::DoDataExchange(pDX);
|
|
|
|
|
DDX_Control(pDX, IDC_SEARCH_COMBO, m_searchCombo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CmdQueryDlg::OnInitDialog()
|
|
|
|
|
{
|
|
|
|
|
return CDialog::OnInitDialog();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL CmdQueryDlg::PreTranslateMessage(MSG * pMsg)
|
|
|
|
|
{
|
|
|
|
|
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
|
|
|
|
|
{
|
|
|
|
|
OnCbnSelectOKCombo();
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CmdQueryDlg, CDialog)
|
|
|
|
|
ON_BN_CLICKED(IDOK, &CmdQueryDlg::OnBnClickedOk)
|
|
|
|
|
ON_BN_CLICKED(IDCANCEL, &CmdQueryDlg::OnBnClickedOk)
|
|
|
|
|
ON_BN_CLICKED(IDC_SETTING_BTN, &CmdQueryDlg::OnBnClickedSetting)
|
|
|
|
|
ON_CBN_EDITCHANGE(IDC_SEARCH_COMBO, &CmdQueryDlg::OnCbnEditchangeCombo)
|
|
|
|
|
ON_CBN_SELENDOK(IDC_SEARCH_COMBO, &CmdQueryDlg::OnCbnSelectOKCombo)
|
|
|
|
|
ON_MESSAGE(WM_ACAD_KEEPFOCUS, &CmdQueryDlg::onAcadKeepFocus)
|
|
|
|
|
ON_WM_SHOWWINDOW()
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
void CmdQueryDlg::OnBnClickedOk()
|
|
|
|
|
{
|
|
|
|
|
CDialog::OnOK();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CmdQueryDlg::OnBnClickedSetting()
|
|
|
|
|
{
|
|
|
|
|
CAcModuleResourceOverride myResources;
|
|
|
|
|
CmdQueryHotkeyDlg hotkeyDlg(this);
|
|
|
|
|
CmdQuery::endHook();
|
|
|
|
|
hotkeyDlg.DoModal();
|
|
|
|
|
CmdQuery::startHook();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CmdQueryDlg::OnCbnEditchangeCombo()
|
|
|
|
|
{
|
|
|
|
|
CString str(_T(""));
|
|
|
|
|
m_searchCombo.GetWindowText(str);
|
|
|
|
|
|
|
|
|
|
if (str.IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
m_searchCombo.ResetContent();
|
|
|
|
|
std::deque<CString>::const_iterator it = m_cmds.begin();
|
|
|
|
|
for (; it != m_cmds.end(); ++it)
|
|
|
|
|
{
|
|
|
|
|
m_searchCombo.AddString(*it);
|
|
|
|
|
}
|
|
|
|
|
m_searchCombo.ShowDropDown();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CmdQuery::CmdQueryItems items;
|
|
|
|
|
CmdQuery::findCommand(str, items);
|
|
|
|
|
if (items.empty()) return;
|
|
|
|
|
|
|
|
|
|
m_searchCombo.ShowDropDown();
|
|
|
|
|
|
|
|
|
|
m_searchCombo.ResetContent();
|
|
|
|
|
m_searchCombo.SetWindowText(str);
|
|
|
|
|
m_searchCombo.SetEditSel(str.GetLength(), str.GetLength());
|
|
|
|
|
|
|
|
|
|
std::wstringstream wsm;
|
|
|
|
|
for (size_t i = 0; i < items.size(); ++i)
|
|
|
|
|
{
|
|
|
|
|
CmdQuery::CmdQueryItem &item = items[i];
|
|
|
|
|
wsm.str(_T(""));
|
|
|
|
|
wsm << std::setw(7) << std::setfill(_T(' ')) << std::left << (LPCTSTR)item.m_cmdItem.m_sCmd
|
|
|
|
|
<< _T("|") << std::setw(4) << std::setfill(wchar_t(0x3000)) << std::left << (LPCTSTR)item.m_cmdItem.m_sName
|
|
|
|
|
<< _T("|") << std::setw(4) << std::setfill(wchar_t(0x3000)) << std::left << (LPCTSTR)item.m_sGroupName
|
|
|
|
|
<< _T("|") << std::setw(4) << std::setfill(wchar_t(0x3000)) << std::left << (LPCTSTR)item.m_sMnuTitle;
|
|
|
|
|
m_searchCombo.AddString(wsm.str().c_str());
|
|
|
|
|
if (i > 10) break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CmdQueryDlg::OnCbnSelectOKCombo()
|
|
|
|
|
{
|
|
|
|
|
int idx(m_searchCombo.GetCurSel());
|
|
|
|
|
if (idx == -1) return;
|
|
|
|
|
CString str(_T(""));
|
|
|
|
|
m_searchCombo.GetLBText(idx, str);
|
|
|
|
|
//m_searchCombo.GetWindowText(str);
|
|
|
|
|
std::vector<CString> vec(0);
|
|
|
|
|
CoreTools::SplitString(str, _T('|'), vec);
|
|
|
|
|
if (vec.empty()) return;
|
|
|
|
|
CString ss(vec[0]);
|
|
|
|
|
ss.TrimLeft();
|
|
|
|
|
ss.TrimRight();
|
|
|
|
|
acedPostCommand(vec[0] + _T(" "));
|
|
|
|
|
this->ShowWindow(SW_HIDE);
|
|
|
|
|
|
|
|
|
|
if (std::find(m_cmds.begin(), m_cmds.end(), str) == m_cmds.end())
|
|
|
|
|
{
|
|
|
|
|
if (m_cmds.size() > 20)
|
|
|
|
|
m_cmds.pop_back();
|
|
|
|
|
m_cmds.push_front(str);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LONG_PTR CmdQueryDlg::onAcadKeepFocus(UINT_PTR, LONG_PTR)
|
|
|
|
|
{
|
|
|
|
|
POINT pt;
|
|
|
|
|
::GetCursorPos(&pt);
|
|
|
|
|
CRect rect;
|
|
|
|
|
GetWindowRect(&rect);
|
|
|
|
|
if (!(rect.PtInRect(pt)))
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CmdQueryDlg::OnShowWindow(BOOL bShow, UINT nStatus)
|
|
|
|
|
{
|
|
|
|
|
CString str = CmdQuery::getHotkeyString();
|
2026-10-04 00:04:20 +08:00
|
|
|
SetWindowText(CString(_T("上华命令搜索 ")) + str);
|
2026-09-28 15:28:50 +08:00
|
|
|
m_searchCombo.ResetContent();
|
|
|
|
|
std::deque<CString>::const_iterator it = m_cmds.begin();
|
|
|
|
|
for (; it != m_cmds.end(); ++it)
|
|
|
|
|
{
|
|
|
|
|
m_searchCombo.AddString(*it);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|