赞
踩
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
上一个内容:17.数据分析工具配置功能的实现
码云地址(master 分支):https://gitee.com/dye_your_fingers/titan
码云版本号:7d38fa038df5816c559b6bda85e4f67dca4f45d3
代码下载地址,在 titan 目录下,文件名为:titan-数据分析工具数据与消息配置的实现.zip
链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg
提取码:q9n5
--来自百度网盘超级会员V4的分享
HOOK引擎,文件名为:黑兔sdk升级版.zip
链接:https://pan.baidu.com/s/1IB-Zs6hi3yU8LC2f-8hIEw
提取码:78h8
--来自百度网盘超级会员V4的分享
以 17.数据分析工具配置功能的实现 的代码为基础进行修改
如果不知道现在做的什么事,那么就跟着做完,然后看成品效果
新加一个菜单资源
然后选择下图中的内容
然后就会得到,下图中的东西
它的内容
然后给消息定义列表添加一个事件:
添加一个鼠标右键单击事件
类注意不要选错了,上一个内容中使用当前窗户创建的类叫做CSet,所以也要把这个鼠标右键单击事件放到CSet里
新加Dialog
然后把id改成 IDD_SETMSGTYPE 这个
给它添加的控件
下拉框的属性
给它添加一个类
叫做CSetMsg
然后给下拉菜单添加一个变量
lstType
再给复选框添加一个变量
再给宏名称定义的输入框添加一个变量
再给消息名称输入框添加变量
然后菜单添加事件
增加
修改
删除
宏定义说明:
在调用发送消息的时候,会发送一个数字代表类型,这个宏定义就是用来决定接收那些类型的数据,这样的一个意思
效果图:
CSet.h文件的修改:新加 txtBool变量、nMsgSel变量(获取消息定义列表选中行)、OnAddMsgType函数(右键菜单里的增加按钮点击事件处理函数)、OnSetMsg函数(右键菜单里的修改按钮点击事件处理函数)、OnDelMsg函数(右键菜单里的删除按钮点击事件处理函数)、OnNMRClickList1函数(消息定义列表鼠标右击事件处理函数)、OnNMRClickList2函数(数据定义列表鼠标右击事件处理函数)
- #pragma once
- #include "CSetMsg.h"
-
- // CSet 对话框
-
- class CSet : public CDialogEx
- {
- DECLARE_DYNAMIC(CSet)
-
- public:
- CSet(CWnd* pParent = nullptr); // 标准构造函数
- virtual ~CSet();
-
- // 对话框数据
- #ifdef AFX_DESIGN_TIME
- enum { IDD = IDD_SET };
- #endif
-
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
- // 生成的消息映射函数
- virtual BOOL OnInitDialog();
-
- DECLARE_MESSAGE_MAP()
- public:
- CListCtrl lstMsgType;
- CListCtrl lstDataType;
- afx_msg void OnBnClickedOk();
- afx_msg void OnBnClickedCancel();
- afx_msg void OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnNMRClickList2(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnAddMsgType();
- public:
- CSetMsg wndMsgSet;
- CString txtBool[2]{ L"否", L"是" };
- int nMsgSel;
- afx_msg void OnSetMsg();
- afx_msg void OnDelMsg();
- };
CSet.cpp文件的修改:新加 OnAddMsgType函数(右键菜单里的增加按钮点击事件处理函数)、OnSetMsg函数(右键菜单里的修改按钮点击事件处理函数)、OnDelMsg函数(右键菜单里的删除按钮点击事件处理函数),OnNMRClickList1函数(消息定义列表鼠标右击事件处理函数),OnNMRClickList2函数(数据定义列表鼠标右击事件处理函数)
- // CSet.cpp: 实现文件
- //
-
- #include "pch.h"
- #include "DataAnly.h"
- #include "CSet.h"
- #include "afxdialogex.h"
- #include "extern_all.h"
-
- // CSet 对话框
-
- IMPLEMENT_DYNAMIC(CSet, CDialogEx)
-
- CSet::CSet(CWnd* pParent /*=nullptr*/)
- : CDialogEx(IDD_SET, pParent)
- {
-
- }
-
- CSet::~CSet()
- {
- }
-
- void CSet::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_LIST1, lstMsgType);
- DDX_Control(pDX, IDC_LIST2, lstDataType);
- }
-
- BOOL CSet::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
- SetListView(&lstMsgType);
- SetListView(&lstDataType);
-
- lstMsgType.InsertColumn(0, L"名称", 0, 100);
- lstMsgType.InsertColumn(1, L"宏定义", 0, 100);
- lstMsgType.InsertColumn(2, L"类型", 0, 100); // 数据和文本,文本直接显示,数据有点复杂看之后实现位置
- lstMsgType.InsertColumn(3, L"输出到文件", 0, 100);
-
- lstDataType.InsertColumn(0, L"消息类型", 0, 100);
- lstDataType.InsertColumn(1, L"数据编号", 0, 100);
- lstDataType.InsertColumn(2, L"数据名称", 0, 100);
- lstDataType.InsertColumn(3, L"显示颜色", 0, 100);
- lstDataType.InsertColumn(4, L"输出到文件", 0, 100);
- lstDataType.InsertColumn(5, L"单独输出", 0, 100);
-
- return TRUE;
- }
-
-
- BEGIN_MESSAGE_MAP(CSet, CDialogEx)
- ON_BN_CLICKED(IDOK, &CSet::OnBnClickedOk)
- ON_BN_CLICKED(IDCANCEL, &CSet::OnBnClickedCancel)
- ON_NOTIFY(NM_RCLICK, IDC_LIST1, &CSet::OnNMRClickList1)
- ON_NOTIFY(NM_RCLICK, IDC_LIST2, &CSet::OnNMRClickList2)
- ON_COMMAND(ID_32771, &CSet::OnAddMsgType)
- ON_COMMAND(ID_32772, &CSet::OnSetMsg)
- ON_COMMAND(ID_32773, &CSet::OnDelMsg)
- END_MESSAGE_MAP()
-
-
- // CSet 消息处理程序
-
-
- void CSet::OnBnClickedOk()
- {
- // TODO: 在此添加控件通知处理程序代码
- CDialogEx::OnOK();
- }
-
-
- void CSet::OnBnClickedCancel()
- {
- // TODO: 在此添加控件通知处理程序代码
- CDialogEx::OnCancel();
- }
-
- int iii = 0;
- void CSet::OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- LPNMITEMACTIVATE p = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
- // TODO: 在此添加控件通知处理程序代码
- *pResult = 0;
- nMsgSel = p->iItem;
- /*
- GetMessagePos函数可以,获取光标位置
- 返回值低16位是x,高16位是y
- */
- DWORD dwPos = GetMessagePos();
- CPoint point(LOWORD(dwPos), HIWORD(dwPos));
- CMenu menu;
- menu.LoadMenuW(IDR_MENU1);// 根据菜单窗口id获取一个菜单窗口对象
- CMenu* pop = menu.GetSubMenu(0);// 获取第一个菜单,也就是现在的消息设置这个菜单
- // 在指定位置显示浮动弹出菜单,并跟踪弹出菜单上项的选择情况。
- pop->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
- }
-
-
- void CSet::OnNMRClickList2(NMHDR* pNMHDR, LRESULT* pResult)
- {
- LPNMITEMACTIVATE p = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
- // TODO: 在此添加控件通知处理程序代码
- *pResult = 0;
-
- /*
- GetMessagePos函数可以,获取光标位置
- 返回值低16位是x,高16位是y
- */
- DWORD dwPos = GetMessagePos();
- CPoint point(LOWORD(dwPos), HIWORD(dwPos));
- CMenu menu;
- menu.LoadMenuW(IDR_MENU1);// 根据菜单窗口id获取一个菜单窗口对象
- CMenu* pop = menu.GetSubMenu(1);// 获取第一个菜单,也就是现在的消息设置这个菜单
- // 在指定位置显示浮动弹出菜单,并跟踪弹出菜单上项的选择情况。
- pop->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
- }
-
-
- void CSet::OnAddMsgType()
- {
- if (wndMsgSet.DoModal() == IDOK) {
- lstMsgType.InsertItem(0, wndMsgSet.txtName);
- lstMsgType.SetItemText(0, 1, wndMsgSet.txtDefine);
- lstMsgType.SetItemText(0, 2, wndMsgSet.txtNameArys[wndMsgSet.lstType.GetCurSel()]);
- lstMsgType.SetItemText(0, 3, txtBool[wndMsgSet.IsTxt]);
- }
- }
-
-
- void CSet::OnSetMsg()
- {
- if (nMsgSel > -1) {
-
- wndMsgSet.SetDatas(lstMsgType.GetItemText(nMsgSel, 0), lstMsgType.GetItemText(nMsgSel, 1), lstMsgType.GetItemText(nMsgSel, 2), lstMsgType.GetItemText(nMsgSel, 3));
- wndMsgSet.DoModal();
- }
- }
-
-
- void CSet::OnDelMsg()
- {
- if (nMsgSel > -1) {
- lstMsgType.DeleteItem(nMsgSel);
- }
- }
新加CSetMsg.cpp文件:
- // CSetMsg.cpp: 实现文件
- //
-
- #include "pch.h"
- #include "DataAnly.h"
- #include "CSetMsg.h"
- #include "afxdialogex.h"
-
-
- // CSetMsg 对话框
-
- IMPLEMENT_DYNAMIC(CSetMsg, CDialogEx)
-
- CSetMsg::CSetMsg(CWnd* pParent /*=nullptr*/)
- : CDialogEx(IDD_SETMSGTYPE, pParent)
- , IsTxt(FALSE)
- , txtDefine(_T(""))
- , txtName(_T(""))
- {
-
- }
-
- CSetMsg::~CSetMsg()
- {
- }
-
- void CSetMsg::DoDataExchange(CDataExchange* pDX)
- {
- CDialogEx::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_COMBO1, lstType);
- DDX_Check(pDX, IDC_CHECK1, IsTxt);
- DDX_Text(pDX, IDC_EDIT1, txtDefine);
- DDX_Text(pDX, IDC_EDIT3, txtName);
- }
-
- BOOL CSetMsg::OnInitDialog()
- {
- CDialogEx::OnInitDialog();
- /*
- 下面的三行代码是给下拉菜单添加选项
- lstType.AddString(L"数据包");
- lstType.AddString(L"文字-ASCII");
- lstType.AddString(L"文字-UTF-16");
- */
- lstType.AddString(txtNameArys[0]);
- lstType.AddString(txtNameArys[1]);
- lstType.AddString(txtNameArys[2]);
- lstType.SetCurSel(0); // 设置下拉菜单默认值
- return TRUE;
- }
-
-
- BEGIN_MESSAGE_MAP(CSetMsg, CDialogEx)
- ON_BN_CLICKED(IDOK, &CSetMsg::OnBnClickedOk)
- END_MESSAGE_MAP()
-
-
- // CSetMsg 消息处理程序
-
-
- void CSetMsg::OnBnClickedOk()
- {
- UpdateData(true);
- CDialogEx::OnOK();
- }
-
- void CSetMsg::SetDatas(CString& _name, CString& _define, CString& _Type, CString& _IsTxt)
- {
- txtName = _name;
- txtDefine = _define;
- int i = 0;
- for (int i = 0; i < 3; i++)
- {
- if (txtNameArys[i] == _Type) {
- break;
- }
- }
- if (i > 2)i = 0;
- lstType.SetCurSel(i);
- IsTxt = _IsTxt == L"是";
- UpdateData(false);
- }
新加CSetMsg.h文件:
- #pragma once
-
-
- // CSetMsg 对话框
-
- class CSetMsg : public CDialogEx
- {
- DECLARE_DYNAMIC(CSetMsg)
-
- public:
- CSetMsg(CWnd* pParent = nullptr); // 标准构造函数
- virtual ~CSetMsg();
-
- // 对话框数据
- #ifdef AFX_DESIGN_TIME
- enum { IDD = IDD_SETMSGTYPE };
- #endif
-
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
- virtual BOOL OnInitDialog();
- DECLARE_MESSAGE_MAP()
- public:
- CComboBox lstType;
- BOOL IsTxt;
- afx_msg void OnBnClickedOk();
- CString txtDefine;
- CString txtName;
- CString txtNameArys[3]{ L"数据包", L"文字-ASCII", L"文字-UTF-16" };
- void SetDatas(CString& _name, CString& _define, CString& _Type, CString& _IsTxt);
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。