#include "stdafx.h" #include "CmdQueryDlg.h" #include "CmdQuery.h" #include #include #include #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::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 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(); SetWindowText(CString(_T("ÉÏ»ªÃüÁîËÑË÷ ")) + str); m_searchCombo.ResetContent(); std::deque::const_iterator it = m_cmds.begin(); for (; it != m_cmds.end(); ++it) { m_searchCombo.AddString(*it); } }