Skip to content

Commit

Permalink
插件管理界面右键菜单中增加插件命令,增加图标
Browse files Browse the repository at this point in the history
zhongyang219 committed Jan 20, 2025

Verified

This commit was signed with the committer’s verified signature.
chenrui333 Rui Chen
1 parent 994ecce commit fce61fd
Showing 6 changed files with 45 additions and 7 deletions.
36 changes: 36 additions & 0 deletions TrafficMonitor/PluginManagerDlg.cpp
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@
#include "PluginManagerDlg.h"
#include "FilePathHelper.h"
#include "PluginInfoDlg.h"
#include "WIC.h"


// CPluginManagerDlg 对话框
@@ -157,6 +158,10 @@ BOOL CPluginManagerDlg::OnInitDialog()

m_menu.LoadMenu(IDR_PLUGIN_MANAGER_MENU); //装载右键菜单

//设置菜单图标
CMenuIcon::AddIconToMenuItem(m_menu.GetSubMenu(0)->GetSafeHmenu(), ID_PLUGIN_DETAIL, FALSE, theApp.GetMenuIcon(IDI_INFO));
CMenuIcon::AddIconToMenuItem(m_menu.GetSubMenu(0)->GetSafeHmenu(), ID_PLUGIN_OPTIONS, FALSE, theApp.GetMenuIcon(IDI_SETTINGS));

return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
@@ -171,6 +176,16 @@ void CPluginManagerDlg::OnNMRClickList1(NMHDR* pNMHDR, LRESULT* pResult)

//弹出右键菜单
CMenu* pContextMenu = m_menu.GetSubMenu(0); //获取第一个弹出菜单
//更新插件子菜单
if (m_item_selected >= 0 && m_item_selected < static_cast<int>(theApp.m_plugins.GetPlugins().size()))
{
auto plugin_info = theApp.m_plugins.GetPlugins()[m_item_selected];
if (plugin_info.plugin != nullptr)
{
theApp.UpdatePluginMenu(pContextMenu, plugin_info.plugin, 3);
}
}

CPoint point1; //定义一个用于确定光标位置的位置
GetCursorPos(&point1); //获取当前光标的位置,以便使得菜单可以跟随光标
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point1.x, point1.y, this); //在指定位置显示弹出菜单
@@ -288,3 +303,24 @@ afx_msg LRESULT CPluginManagerDlg::OnLinkClicked(WPARAM wParam, LPARAM lParam)

return 0;
}


BOOL CPluginManagerDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
UINT uMsg = LOWORD(wParam);
//选择了插件命令
if (uMsg >= ID_PLUGIN_COMMAND_START && uMsg <= ID_PLUGIN_COMMAND_MAX)
{
int index = uMsg - ID_PLUGIN_COMMAND_START;
if (m_item_selected >= 0 && m_item_selected < static_cast<int>(theApp.m_plugins.GetPlugins().size()))
{
ITMPlugin* plugin = theApp.m_plugins.GetPlugins()[m_item_selected].plugin;
if (plugin != nullptr && plugin->GetAPIVersion() >= 5)
{
plugin->OnPluginCommand(index, (void*)GetSafeHwnd(), nullptr);
}
}
}

return CBaseDialog::OnCommand(wParam, lParam);
}
1 change: 1 addition & 0 deletions TrafficMonitor/PluginManagerDlg.h
Original file line number Diff line number Diff line change
@@ -50,4 +50,5 @@ class CPluginManagerDlg : public CBaseDialog
afx_msg void OnPluginDisable();
protected:
afx_msg LRESULT OnLinkClicked(WPARAM wParam, LPARAM lParam);
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
};
2 changes: 1 addition & 1 deletion TrafficMonitor/TaskBarDlg.cpp
Original file line number Diff line number Diff line change
@@ -1385,7 +1385,7 @@ void CTaskBarDlg::OnRButtonUp(UINT nFlags, CPoint point)
CMenuIcon::AddIconToMenuItem(pMenu->GetSafeHmenu(), 15, TRUE, plugin_icon);
}
//更新插件子菜单
theApp.UpdatePluginMenu(&theApp.m_taskbar_menu_plugin_sub_menu, plugin);
theApp.UpdatePluginMenu(&theApp.m_taskbar_menu_plugin_sub_menu, plugin, 2);
//弹出菜单
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point1.x, point1.y, this);
}
8 changes: 4 additions & 4 deletions TrafficMonitor/TrafficMonitor.cpp
Original file line number Diff line number Diff line change
@@ -819,7 +819,7 @@ void CTrafficMonitorApp::InitMenuResourse()
m_main_menu_plugin_sub_menu.AppendMenu(MF_STRING | MF_ENABLED, ID_PLUGIN_OPTIONS, CCommon::LoadText(IDS_PLUGIN_OPTIONS, _T("...")));
m_main_menu_plugin_sub_menu.AppendMenu(MF_STRING | MF_ENABLED, ID_PLUGIN_DETAIL, CCommon::LoadText(IDS_PLUGIN_INFO, _T("...")));
CMenuIcon::AddIconToMenuItem(m_main_menu_plugin_sub_menu.GetSafeHmenu(), ID_PLUGIN_OPTIONS, FALSE, GetMenuIcon(IDI_SETTINGS));
CMenuIcon::AddIconToMenuItem(m_main_menu_plugin_sub_menu.GetSafeHmenu(), ID_PLUGIN_DETAIL, FALSE, GetMenuIcon(IDI_ITEM));
CMenuIcon::AddIconToMenuItem(m_main_menu_plugin_sub_menu.GetSafeHmenu(), ID_PLUGIN_DETAIL, FALSE, GetMenuIcon(IDI_INFO));
CMenu* main_menu_plugin = m_main_menu_plugin.GetSubMenu(0);
main_menu_plugin->AppendMenu(MF_SEPARATOR);
main_menu_plugin->AppendMenu(MF_POPUP | MF_STRING, (UINT)m_main_menu_plugin_sub_menu.m_hMenu, _T("<plugin name>"));
@@ -828,7 +828,7 @@ void CTrafficMonitorApp::InitMenuResourse()
m_taskbar_menu_plugin_sub_menu.AppendMenu(MF_STRING | MF_ENABLED, ID_PLUGIN_OPTIONS_TASKBAR, CCommon::LoadText(IDS_PLUGIN_OPTIONS, _T("...")));
m_taskbar_menu_plugin_sub_menu.AppendMenu(MF_STRING | MF_ENABLED, ID_PLUGIN_DETAIL_TASKBAR, CCommon::LoadText(IDS_PLUGIN_INFO, _T("...")));
CMenuIcon::AddIconToMenuItem(m_taskbar_menu_plugin_sub_menu.GetSafeHmenu(), ID_PLUGIN_OPTIONS_TASKBAR, FALSE, GetMenuIcon(IDI_SETTINGS));
CMenuIcon::AddIconToMenuItem(m_taskbar_menu_plugin_sub_menu.GetSafeHmenu(), ID_PLUGIN_DETAIL_TASKBAR, FALSE, GetMenuIcon(IDI_ITEM));
CMenuIcon::AddIconToMenuItem(m_taskbar_menu_plugin_sub_menu.GetSafeHmenu(), ID_PLUGIN_DETAIL_TASKBAR, FALSE, GetMenuIcon(IDI_INFO));
CMenu* taskbar_menu_plugin = m_taskbar_menu_plugin.GetSubMenu(0);
taskbar_menu_plugin->AppendMenu(MF_SEPARATOR);
taskbar_menu_plugin->AppendMenu(MF_POPUP | MF_STRING, (UINT)m_taskbar_menu_plugin_sub_menu.m_hMenu, _T("<plugin name>"));
@@ -1298,12 +1298,12 @@ void CTrafficMonitorApp::SendSettingsToPlugin()
}
}

void CTrafficMonitorApp::UpdatePluginMenu(CMenu* pMenu, ITMPlugin* plugin)
void CTrafficMonitorApp::UpdatePluginMenu(CMenu* pMenu, ITMPlugin* plugin, int plugin_cmd_start_index)
{
if (pMenu != nullptr && plugin != nullptr)
{
//删除菜单已经存在的插件命令
while (pMenu->GetMenuItemCount() > 2)
while (pMenu->GetMenuItemCount() > plugin_cmd_start_index)
{
if (!pMenu->DeleteMenu(pMenu->GetMenuItemCount() - 1, MF_BYPOSITION))
break;
3 changes: 2 additions & 1 deletion TrafficMonitor/TrafficMonitor.h
Original file line number Diff line number Diff line change
@@ -157,7 +157,8 @@ class CTrafficMonitorApp : public CWinApp
void SendSettingsToPlugin(); //向所有插件发送当前的选项设置

//更新插件子菜单
static void UpdatePluginMenu(CMenu* pMenu, ITMPlugin* plugin);
//plugin_cmd_start_index: 插件命令在菜单中的起始位置
static void UpdatePluginMenu(CMenu* pMenu, ITMPlugin* plugin, int plugin_cmd_start_index);

private:
//int m_no_multistart_warning_time{}; //用于设置在开机后多长时间内不弹出“已经有一个程序正在运行”的警告提示
2 changes: 1 addition & 1 deletion TrafficMonitor/TrafficMonitorDlg.cpp
Original file line number Diff line number Diff line change
@@ -1935,7 +1935,7 @@ void CTrafficMonitorDlg::OnRButtonUp(UINT nFlags, CPoint point)
CMenuIcon::AddIconToMenuItem(pContextMenu->GetSafeHmenu(), 17, TRUE, plugin_icon);
}
//更新插件子菜单
theApp.UpdatePluginMenu(&theApp.m_main_menu_plugin_sub_menu, plugin);
theApp.UpdatePluginMenu(&theApp.m_main_menu_plugin_sub_menu, plugin, 2);

pContextMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point1.x, point1.y, this); //在指定位置显示弹出菜单

0 comments on commit fce61fd

Please sign in to comment.