实现的功能页面如下图:
实现的过程:
基于MFC完成页面的设置;首先在OnInitDialog()函数中完成对话框的初始化,初始化包括快捷方案组合窗口初始化(LoadAllSchemes( FileName))、列表控件初始化InitListCtrl()、插件组合窗口初始化LoadAllPlugin();其中快捷方案组合窗口中的信息是通过SsnGetPath获取相应地址信息,查询该地址下对应的文件节名就是相应的快捷方案;在查找快捷方案是,遍历相应文件夹中的文件信息,即得到列表空间中的“命令描述”和“快捷键信息”,查找到的相应快捷键信息通过vector存储到vSave中,用于查询时调用;同时通过map把相应的插件ID和插件名对应存储到mapPlugin,用于插件查询时使用;
快捷方案查找,首先获取组合框中的快捷方案名,快捷方案名既是相应的文件名,通过遍历文件名下的相应信息,完成查找功能;
插件查找,因为mapPlugin中存储了插件ID和插件名的对应信息,所以通过获得组合框中选中的插件名,则可以查找到对应的插件ID,通过插件ID,在列表框中填充相应的信息;
查询功能,获取列表框中每行每列的相应信息和Edit中的信息进行比较,如果相同,则标注该行;
实现代码:
HotkeyScheme.h
#pragma once
#include "SSNAPI.h"
#include "Resource.h"
#include <vector>
#include <map>
class CHotkeyScheme: public CDialogEx
{
DECLARE_DYNAMIC(CHotkeyScheme)
public:
CHotkeyScheme(CWnd* pParent = NULL); // standard constructor
virtual ~CHotkeyScheme();
enum { IDD = IDD_HOTKEY_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
public:
void LoadAllSchemes(CString FileName); //加载所有的快捷键方案
void LoadAllPlugin(); //加载所有的插件
void InitListCtrl(); //初始化快捷键列表属性
void FindFileName(const TCHAR* pat,CString FileName);
void OnClose();
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedFind(); //查询
CComboBox m_Scheme;
CListCtrl m_list;
std::vector<PSSN_COMMAND> m_vSave;
void CHotkeyScheme::OnBnClickedCancel();
CComboBox m_Module;
afx_msg void OnSelchangeScheme();
afx_msg void OnCbnSelchangeModule();
int m_Location;
CString m_Text;
std::map <INT, PSSN_PLUGIN_ENTRY> m_mapPlugin;
afx_msg void OnChangeText();
};
HotkeyScheme.cpp
#include "StdAfx.h"
#include "HotkeyScheme.h"
#include "CoreUI.h"
#include "afxdialogex.h"
#include "Windowsx.h"
using namespace std;
CHotkeyScheme *g_pHotkeyScheme = NULL;
IMPLEMENT_DYNAMIC(CHotkeyScheme, CDialogEx)
CHotkeyScheme::CHotkeyScheme(CWnd* pParent /*=NULL*/)
: CDialogEx(CHotkeyScheme::IDD, pParent)
{
#ifndef _WIN32_WCE
EnableActiveAccessibility();
#endif
m_Location=0;
}
CHotkeyScheme::~CHotkeyScheme()
{
for(int k=0;k<m_vSave.size();k++)
{
delete m_vSave[k];
}
m_vSave.clear();
}
void CHotkeyScheme::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX