Skip to content

Commit

Permalink
插件管理界面右键菜单中增加插件命令,增加图标
Browse files Browse the repository at this point in the history
zhongyang219 committed Jan 20, 2025
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.