From 87d033a6cbe254f2c85e933d173592d0dac1e861 Mon Sep 17 00:00:00 2001 From: zhongyang219 <380526481@qq.com> Date: Fri, 27 Aug 2021 16:58:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=8F=92=E4=BB=B6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E7=9A=84=E9=80=89=E9=A1=B9=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PluginDemo/DataManager.cpp | 26 +++++++++++ PluginDemo/DataManager.h | 12 +++++ PluginDemo/OptionsDlg.cpp | 21 +++++++++ PluginDemo/OptionsDlg.h | 7 ++- PluginDemo/PluginDemo.h | 2 +- PluginDemo/PluginDemo.rc | 69 ++++++++++++++++++++++++++-- PluginDemo/dllmain.cpp | 16 +++++-- PluginDemo/resource.h | 5 +- TrafficMonitor/PluginManager.h | 2 +- TrafficMonitor/PluginManagerDlg.cpp | 8 ++-- TrafficMonitor/Test.cpp | 4 +- TrafficMonitor/TrafficMonitor.rc | Bin 278654 -> 283192 bytes TrafficMonitor/resource.h | 3 ++ 13 files changed, 155 insertions(+), 20 deletions(-) diff --git a/PluginDemo/DataManager.cpp b/PluginDemo/DataManager.cpp index c85540f9e..683b73b19 100644 --- a/PluginDemo/DataManager.cpp +++ b/PluginDemo/DataManager.cpp @@ -3,6 +3,18 @@ CDataManager::CDataManager() { + //获取模块的路径 + HMODULE hModule = reinterpret_cast(&__ImageBase); + wchar_t path[MAX_PATH]; + GetModuleFileNameW(hModule, path, MAX_PATH); + m_module_path = path; + //从配置文件读取配置 + LoadConfig(); +} + +CDataManager::~CDataManager() +{ + SaveConfig(); } CDataManager& CDataManager::Instance() @@ -10,3 +22,17 @@ CDataManager& CDataManager::Instance() static CDataManager instance; return instance; } + +void CDataManager::LoadConfig() +{ + std::wstring config_path = m_module_path + L".ini"; + m_setting_data.show_second = GetPrivateProfileInt(_T("config"), _T("show_second"), 0, config_path.c_str()); +} + +void CDataManager::SaveConfig() const +{ + std::wstring config_path = m_module_path + L".ini"; + wchar_t buff[16]; + swprintf_s(buff, L"%d", m_setting_data.show_second); + WritePrivateProfileString(_T("config"), _T("show_second"), buff, config_path.c_str()); +} diff --git a/PluginDemo/DataManager.h b/PluginDemo/DataManager.h index 70e0500a9..3e9ac8efb 100644 --- a/PluginDemo/DataManager.h +++ b/PluginDemo/DataManager.h @@ -1,16 +1,28 @@ #pragma once #include +struct SettingData +{ + bool show_second{ false }; +}; + class CDataManager { private: CDataManager(); + ~CDataManager(); public: static CDataManager& Instance(); + void LoadConfig(); + void SaveConfig() const; + public: std::wstring m_cur_time; std::wstring m_cur_date; + SettingData m_setting_data; +private: + std::wstring m_module_path; }; diff --git a/PluginDemo/OptionsDlg.cpp b/PluginDemo/OptionsDlg.cpp index 2de61fff7..859db2619 100644 --- a/PluginDemo/OptionsDlg.cpp +++ b/PluginDemo/OptionsDlg.cpp @@ -28,7 +28,28 @@ void COptionsDlg::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(COptionsDlg, CDialog) + ON_BN_CLICKED(IDC_SHOW_SECOND_CHECK, &COptionsDlg::OnBnClickedShowSecondCheck) END_MESSAGE_MAP() // COptionsDlg 消息处理程序 + + +BOOL COptionsDlg::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // TODO: 在此添加额外的初始化 + //初始化控件状态 + CheckDlgButton(IDC_SHOW_SECOND_CHECK, m_data.show_second); + + return TRUE; // return TRUE unless you set the focus to a control + // 异常: OCX 属性页应返回 FALSE +} + + +void COptionsDlg::OnBnClickedShowSecondCheck() +{ + // TODO: 在此添加控件通知处理程序代码 + m_data.show_second = (IsDlgButtonChecked(IDC_SHOW_SECOND_CHECK) != 0); +} diff --git a/PluginDemo/OptionsDlg.h b/PluginDemo/OptionsDlg.h index 78284e8dd..7b16b9bbf 100644 --- a/PluginDemo/OptionsDlg.h +++ b/PluginDemo/OptionsDlg.h @@ -1,5 +1,5 @@ #pragma once - +#include "DataManager.h" // COptionsDlg 对话框 @@ -16,8 +16,13 @@ class COptionsDlg : public CDialog enum { IDD = IDD_OPTIONS_DIALOG }; #endif + SettingData m_data; + protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() +public: + virtual BOOL OnInitDialog(); + afx_msg void OnBnClickedShowSecondCheck(); }; diff --git a/PluginDemo/PluginDemo.h b/PluginDemo/PluginDemo.h index 89b27d8d9..ae9bad337 100644 --- a/PluginDemo/PluginDemo.h +++ b/PluginDemo/PluginDemo.h @@ -7,7 +7,7 @@ extern "C" { __declspec(dllexport) IPluginItem* TMPluginCreateInstance(int index); __declspec(dllexport) void TMPluginInfoRequired(); - __declspec(dllexport) void TMPluginOptions(); + __declspec(dllexport) void TMPluginOptions(HWND hParent); #ifdef __cplusplus } diff --git a/PluginDemo/PluginDemo.rc b/PluginDemo/PluginDemo.rc index 441f402c4..e99e1783f 100644 --- a/PluginDemo/PluginDemo.rc +++ b/PluginDemo/PluginDemo.rc @@ -50,13 +50,15 @@ END // Dialog // -IDD_OPTIONS_DIALOG DIALOGEX 0, 0, 310, 178 +IDD_OPTIONS_DIALOG DIALOGEX 0, 0, 165, 90 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "ʱں" FONT 9, "΢ź", 400, 0, 0x0 BEGIN - DEFPUSHBUTTON "ȷ",IDOK,199,157,50,14 - PUSHBUTTON "ȡ",IDCANCEL,253,157,50,14 + DEFPUSHBUTTON "ȷ",IDOK,50,69,50,14 + PUSHBUTTON "ȡ",IDCANCEL,108,69,50,14 + GROUPBOX "ʱʽ",IDC_STATIC,7,7,151,55 + CONTROL "ʾ",IDC_SHOW_SECOND_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,21,63,10 END @@ -71,9 +73,9 @@ BEGIN IDD_OPTIONS_DIALOG, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 303 + RIGHTMARGIN, 158 TOPMARGIN, 7 - BOTTOMMARGIN, 171 + BOTTOMMARGIN, 83 END END #endif // APSTUDIO_INVOKED @@ -93,6 +95,63 @@ END ///////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////// +// Ӣ() resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_OPTIONS_DIALOG DIALOGEX 0, 0, 165, 90 +STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Time and date settings" +FONT 9, "Segoe UI", 400, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK",IDOK,50,69,50,14 + PUSHBUTTON "Cancel",IDCANCEL,108,69,50,14 + GROUPBOX "Time format",IDC_STATIC,7,7,151,55 + CONTROL "Show seconds",IDC_SHOW_SECOND_CHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,21,63,10 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_OPTIONS_DIALOG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 158 + TOPMARGIN, 7 + BOTTOMMARGIN, 83 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// AFX_DIALOG_LAYOUT +// + +IDD_OPTIONS_DIALOG AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +#endif // Ӣ() resources +///////////////////////////////////////////////////////////////////////////// + + #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// diff --git a/PluginDemo/dllmain.cpp b/PluginDemo/dllmain.cpp index dfd0cf45c..6a1412fb1 100644 --- a/PluginDemo/dllmain.cpp +++ b/PluginDemo/dllmain.cpp @@ -47,13 +47,21 @@ void TMPluginInfoRequired() wchar_t buff[128]; swprintf_s(buff, L"%d/%.2d/%.2d", system_time.wYear, system_time.wMonth, system_time.wDay); CDataManager::Instance().m_cur_date = buff; - swprintf_s(buff, L"%.2d:%.2d:%.2d", system_time.wHour, system_time.wMinute, system_time.wSecond); + + if (CDataManager::Instance().m_setting_data.show_second) + swprintf_s(buff, L"%.2d:%.2d:%.2d", system_time.wHour, system_time.wMinute, system_time.wSecond); + else + swprintf_s(buff, L"%.2d:%.2d", system_time.wHour, system_time.wMinute); CDataManager::Instance().m_cur_time = buff; } -void TMPluginOptions() +void TMPluginOptions(HWND hParent) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); - COptionsDlg dlg; - dlg.DoModal(); + COptionsDlg dlg(CWnd::FromHandle(hParent)); + dlg.m_data = CDataManager::Instance().m_setting_data; + if (dlg.DoModal() == IDOK) + { + CDataManager::Instance().m_setting_data = dlg.m_data; + } } diff --git a/PluginDemo/resource.h b/PluginDemo/resource.h index 4af258260..86ff09b71 100644 --- a/PluginDemo/resource.h +++ b/PluginDemo/resource.h @@ -4,14 +4,15 @@ // #define IDD_DIALOG1 101 #define IDD_OPTIONS_DIALOG 101 +#define IDC_SHOW_SECOND_CHECK 1001 // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 103 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_CONTROL_VALUE 1002 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/TrafficMonitor/PluginManager.h b/TrafficMonitor/PluginManager.h index ecdc149f2..24a4d6ed2 100644 --- a/TrafficMonitor/PluginManager.h +++ b/TrafficMonitor/PluginManager.h @@ -4,7 +4,7 @@ typedef IPluginItem* (*pfTMPluginCreateInstance)(int); typedef void (*pfTMPluginInfoRequired)(); -typedef void (*pfTMPluginOptions)(); +typedef void (*pfTMPluginOptions)(HWND); //用于加载和管理插件 class CPluginManager diff --git a/TrafficMonitor/PluginManagerDlg.cpp b/TrafficMonitor/PluginManagerDlg.cpp index 57bd14a92..69839f234 100644 --- a/TrafficMonitor/PluginManagerDlg.cpp +++ b/TrafficMonitor/PluginManagerDlg.cpp @@ -74,13 +74,13 @@ BOOL CPluginManagerDlg::OnInitDialog() switch (plugin.state) { case CPluginManager::PluginState::PS_SUCCEED: - status = _T("加载成功"); + status = CCommon::LoadText(IDS_PLUGIN_LOAD_SUCCEED); break; case CPluginManager::PluginState::PS_MUDULE_LOAD_FAILED: - status.Format(_T("插件模块加载失败,故障代码:%d"), plugin.error_code); + status = CCommon::LoadTextFormat(IDS_PLUGIN_MODULE_LOAD_FAILED, { static_cast(plugin.error_code) }); break; case CPluginManager::PluginState::PS_FUNCTION_GET_FAILED: - status.Format(_T("函数获取失败,故障代码:%d"), plugin.error_code); + status = CCommon::LoadTextFormat(IDS_PLUGIN_FUNCTION_GET_FAILED, { static_cast(plugin.error_code) }); break; } int index = m_list_ctrl.GetItemCount(); @@ -122,6 +122,6 @@ void CPluginManagerDlg::OnBnClickedOptinsButton() { auto plugin = theApp.m_plugins.GetPlugins()[m_item_selected]; if (plugin.TMPluginOptions != nullptr) - plugin.TMPluginOptions(); + plugin.TMPluginOptions(m_hWnd); } } diff --git a/TrafficMonitor/Test.cpp b/TrafficMonitor/Test.cpp index ebf64f8ad..47f06210b 100644 --- a/TrafficMonitor/Test.cpp +++ b/TrafficMonitor/Test.cpp @@ -22,7 +22,7 @@ void CTest::Test() void CTest::TestCommand() { - TestPlugin(); + //TestPlugin(); } void CTest::TestHttpQequest() @@ -67,6 +67,6 @@ void CTest::TestPlugin() { if (!theApp.m_plugins.GetPlugins().empty()) { - theApp.m_plugins.GetPlugins()[0].TMPluginOptions(); + theApp.m_plugins.GetPlugins()[0].TMPluginOptions(theApp.m_pMainWnd->m_hWnd); } } diff --git a/TrafficMonitor/TrafficMonitor.rc b/TrafficMonitor/TrafficMonitor.rc index 30f798c8d274214be4d01d5d95ead2e824b3b0ba..8a7acf98500cf61c5b8b74cb685616ee5e79b81e 100644 GIT binary patch delta 964 zcmey@Ah=_RV8a$hlf3CKJQxKG0~mZ5LK)l{JQ@5L;(=^`21f=LAS)Os>I{UgKJshLV;RbVH&5;cV!e+y_EdTPcbVz9HibbQni=o zziaB8X^;IFE2RG0FsL#Z0FZq>C6$#J{stDL zZg0L8jMpsDNjy^9WAYd+OjyJsXD3fzz|1JNecd9)Y59{M$Z>4GuvdYR10=DqnyqB| z20o@`o16BpW1N00kx6X&g-?teoBa;jFi&5Q$IP!9=6k6J}?Pz`!XalMNT6>A2KqZ};jP!hj2_-;bC^@+P5EKJZJ`DLlH>Cj6 za4|zELo!41^owtpWkD%e7$XHUxJ++9&+I>4!HJn=y2l45KE-^X&QgXPhE$;b9Jono zKoc{;qAAk_`B)TLNlMhyXPjrY<97p^n+J4H3DBf`hP>$?Z!$@9<2D!^>YuDwdRPIW C{~7ZD delta 170 zcmdn7MDSmOV8a$hlf22-l=vp`NNwMf&uC#XnQvyuc8?{DG5M44o!GG5N`h&X?Bok4 zxVGzWzZ z;={CkQ8n``X_!%ym?lqHqA=+^&*Tp;)@^r~!#s%>tQ2T=%e?6tpP9ifTI0jg!wLX* CtVz`X diff --git a/TrafficMonitor/resource.h b/TrafficMonitor/resource.h index 347120cd6..a42d2e2bd 100644 --- a/TrafficMonitor/resource.h +++ b/TrafficMonitor/resource.h @@ -251,6 +251,9 @@ #define IDS_HDD_USAGE 347 #define IDS_FILE_NAME 348 #define IDS_STATUS 349 +#define IDS_PLUGIN_LOAD_SUCCEED 350 +#define IDS_PLUGIN_MODULE_LOAD_FAILED 351 +#define IDS_PLUGIN_FUNCTION_GET_FAILED 352 #define IDC_STATIC_INFO 1001 #define IDC_STATIC1 1002 #define IDC_STATIC_DOWN 1002