diff --git a/NetSpeed/NetSpeed/Dialog/Dialog.h b/NetSpeed/NetSpeed/Dialog/Dialog.h new file mode 100644 index 0000000..5548411 --- /dev/null +++ b/NetSpeed/NetSpeed/Dialog/Dialog.h @@ -0,0 +1,34 @@ +#pragma once +#include +template +class Dialog; + +template +class Dialog { +public: + static VOID Destroy(); + static HWND Handle_Get(); + static VOID Handle_Set(HWND Handle); +private: + static HWND Handle_; +}; + +template +HWND Dialog::Handle_ = NULL; + +//public: + +template +VOID Dialog::Destroy() { + DestroyWindow(Handle_); +} + +template +HWND Dialog::Handle_Get() { + return Handle_; +} + +template +VOID Dialog::Handle_Set(HWND Handle) { + Handle_ = Handle; +} diff --git a/NetSpeed/NetSpeed/DialogMain/DialogMain.cpp b/NetSpeed/NetSpeed/DialogMain/DialogMain.cpp deleted file mode 100644 index 756ef34..0000000 --- a/NetSpeed/NetSpeed/DialogMain/DialogMain.cpp +++ /dev/null @@ -1,115 +0,0 @@ -#include "DialogMain.h" -#include -#include "../Menu/Menu.h" -#include "../Net/Net.h" -#include "../NotifyIcon/NotifyIcon.h" -#include "../Registry/Registry.h" -#include "../Resource/resource.h" - -HBRUSH color_background; -HWND dialog_main; - -INT_PTR WINAPI DialogMainProcess(HWND dialog, UINT message, WPARAM wparam, LPARAM lparam) { - dialog_main = dialog; - BOOL handle_result = TRUE; - switch (message) { - case WM_CTLCOLORDLG: - { - return (INT_PTR)color_background; - } - case WM_CTLCOLORSTATIC: - { - SetBkMode((HDC)wparam, TRANSPARENT); - SetTextColor((HDC)wparam, RGB(255, 255, 255)); - return (INT_PTR)color_background; - } - case WM_COMMAND: - { - switch (LOWORD(wparam)) { - case WM_MENUCLEAN: - { - Menu::Item_Clean(); - break; - } - case WM_MENUEXIT: - { - Menu::Item_Exit(); - break; - } - case WM_MENUSHOW: - { - Menu::Item_Show(); - break; - } - case WM_MENUSTARTUP: - { - Menu::Item_Startup(); - break; - } - default: - { - handle_result = FALSE; - break; - } - } - break; - } - case WM_EXITSIZEMOVE: - { - Registry::Position_Create(); - break; - } - case WM_INITDIALOG: - { - color_background= CreateSolidBrush(RGB(0, 0, 0)); - POINT dialog_position= Registry::Position_Get(); - if (dialog_position.x != -1 && dialog_position.y != -1) { - SetWindowPos(dialog_main, NULL, dialog_position.x, dialog_position.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER); - } - SetWindowLongW( - dialog_main, - GWL_EXSTYLE, - GetWindowLongW(dialog_main, GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TOOLWINDOW - ); - SetLayeredWindowAttributes(dialog_main, 0, (255 * 50) / 100, LWA_ALPHA); - Net::RefreshNetSpeedStart(); - break; - } - case WM_LBUTTONDOWN: - { - SendMessageW(dialog_main, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(LOWORD(lparam), HIWORD(lparam))); - break; - } - case WM_NCPAINT: - { - NotifyIcon::Init(); - break; - } - case WM_NOTIFYICON: - { - switch (lparam) { - case WM_RBUTTONUP: - { - Menu::Pop(); - return TRUE; - } - default: - { - handle_result = FALSE; - break; - } - } - break; - } - case WM_RBUTTONUP: - { - Menu::Pop(); - break; - } - default: - { - handle_result = FALSE; - } - } - return handle_result; -} diff --git a/NetSpeed/NetSpeed/DialogMain/DialogMain.h b/NetSpeed/NetSpeed/DialogMain/DialogMain.h deleted file mode 100644 index 48f154c..0000000 --- a/NetSpeed/NetSpeed/DialogMain/DialogMain.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include - -extern HBRUSH color_background; -extern HWND dialog_main; - -INT_PTR WINAPI DialogMainProcess(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); diff --git a/NetSpeed/NetSpeed/Dialog_Main/Dialog_Main.cpp b/NetSpeed/NetSpeed/Dialog_Main/Dialog_Main.cpp new file mode 100644 index 0000000..9e4e37e --- /dev/null +++ b/NetSpeed/NetSpeed/Dialog_Main/Dialog_Main.cpp @@ -0,0 +1,164 @@ +#include "Dialog_Main.h" +#include +#include "../Dialog_Setting/Dialog_Setting.h" +#include "../Menu/Menu.h" +#include "../Net/Net.h" +#include "../NotifyIcon/NotifyIcon.h" +#include "../Registry/Registry.h" +#include "../Resource/resource.h" + +HBRUSH Dialog_Main::Handle_Color_Background_; +BOOL Dialog_Main::Show_; + +//public: + +INT_PTR Dialog_Main::Process(HWND Handle_Dialog, UINT Message_Dialog, WPARAM Param_WORD, LPARAM Param_LONG) { + Handle_Set(Handle_Dialog); + BOOL Result_Process = TRUE; + switch (Message_Dialog) { + case WM_COMMAND: + { + switch (LOWORD(Param_WORD)) { + case WM_MENU_EXIT: + { + Menu::Item_Exit(); + break; + } + case WM_MENU_SETTING: + { + Menu::Item_Setting(); + break; + } + case WM_MENU_SHOW: + { + Menu::Item_Show(); + break; + } + case WM_MENU_STARTUP: + { + Menu::Item_Startup(); + break; + } + default: + { + Result_Process = FALSE; + break; + } + } + break; + } + case WM_CTLCOLORDLG: + { + return (INT_PTR)Handle_Color_Background_; + } + case WM_CTLCOLORSTATIC: + { + SetBkMode((HDC)Param_WORD, TRANSPARENT); + SetTextColor((HDC)Param_WORD, RGB(255, 255, 255)); + return (INT_PTR)Handle_Color_Background_; + } + case WM_DESTROY: + { + NotifyIcon::Destroy(); + return 0; + } + case WM_EXITSIZEMOVE: + { + Registry::Position_Save(); + break; + } + case WM_INITDIALOG: + { + Handle_Color_Background_ = CreateSolidBrush(RGB(0, 0, 0)); + POINT Position = Registry::Position_Get(); + Position_Set(Position); + SetWindowLongW( + Handle_Get(), + GWL_EXSTYLE, + GetWindowLongW(Handle_Get(), GWL_EXSTYLE) | WS_EX_LAYERED | WS_EX_TOOLWINDOW + ); + INT Transparency = Registry::Transparency_Get(); + Transparency_Set(Transparency); + Net::Refresh_Start(); + break; + } + case WM_LBUTTONDOWN: + { + SendMessageW(Handle_Get(), WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(LOWORD(Param_LONG), HIWORD(Param_LONG))); + break; + } + case WM_NCPAINT: + { + NotifyIcon::Init(); + break; + } + case WM_NOTIFYICON: + { + switch (Param_LONG) { + case WM_RBUTTONUP: + { + Menu::Pop(); + return TRUE; + } + default: + { + Result_Process = FALSE; + break; + } + } + break; + } + case WM_RBUTTONUP: + { + Menu::Pop(); + break; + } + default: + { + Result_Process = FALSE; + break; + } + } + return Result_Process; +} + +POINT Dialog_Main::Position_Get() { + RECT Position_RECT; + GetWindowRect(Dialog_Main::Handle_Get(), &Position_RECT); + MapWindowPoints(HWND_DESKTOP, GetParent(Dialog_Main::Handle_Get()), (LPPOINT)&Position_RECT, sizeof(RECT) / sizeof(POINT)); + POINT Position_POINT; + Position_POINT.x = Position_RECT.left; + Position_POINT.y = Position_RECT.top; + return Position_POINT; +} + +VOID Dialog_Main::Position_Set(POINT Position) { + SetWindowPos(Handle_Get(), NULL, Position.x, Position.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER); +} + +BOOL Dialog_Main::Show_Get() { + return IsWindowVisible(Handle_Get()); +} + +VOID Dialog_Main::Show_Set(BOOL Show) { + if (Show == TRUE) { + ShowWindow(Dialog_Main::Handle_Get(), SW_SHOW); + } + else { + ShowWindow(Dialog_Main::Handle_Get(), SW_HIDE); + } + if (Dialog_Setting::Handle_Get() != NULL) { + Dialog_Setting::Refresh_Check_Setting_Show(); + } +} + +INT Dialog_Main::Transparency_Get() { + BYTE Transparency_BYTE; + GetLayeredWindowAttributes(Dialog_Main::Handle_Get(), NULL, &Transparency_BYTE, NULL); + INT Transparency_INT = Transparency_BYTE * 100.0 / 255.0 + 0.5; + return Transparency_INT; +} + +VOID Dialog_Main::Transparency_Set(INT Transparency) { + SetLayeredWindowAttributes(Handle_Get(), 0, (255.0* Transparency) / 100.0 + 0.5, LWA_ALPHA); +} diff --git a/NetSpeed/NetSpeed/Dialog_Main/Dialog_Main.h b/NetSpeed/NetSpeed/Dialog_Main/Dialog_Main.h new file mode 100644 index 0000000..af414a5 --- /dev/null +++ b/NetSpeed/NetSpeed/Dialog_Main/Dialog_Main.h @@ -0,0 +1,21 @@ +#pragma once +#include +class Dialog_Main; +#include "../Dialog/Dialog.h" + +class Dialog_Main :public Dialog { +public: + static INT_PTR WINAPI Process(HWND Handle_Dialog, UINT Message_Dialog, WPARAM Param_WORD, LPARAM Param_LONG); + static POINT Position_Get(); + static VOID Position_Set(POINT Position); + static BOOL Show_Get(); + static VOID Show_Set(BOOL Show); + static INT Transparency_Get(); + static VOID Transparency_Set(INT Transparency); +private: + static HBRUSH Handle_Color_Background_; + static BOOL Show_; +}; + + + diff --git a/NetSpeed/NetSpeed/Dialog_Setting/Dialog_Setting.cpp b/NetSpeed/NetSpeed/Dialog_Setting/Dialog_Setting.cpp new file mode 100644 index 0000000..79b6dc8 --- /dev/null +++ b/NetSpeed/NetSpeed/Dialog_Setting/Dialog_Setting.cpp @@ -0,0 +1,178 @@ +#include "Dialog_Setting.h" +#include +#include +#include "../Dialog_Main/Dialog_Main.h" +#include "../Registry/Registry.h" +#include "../Resource/resource.h" +#include "../Text/Text.h" + +//public: + +INT_PTR Dialog_Setting::Process(HWND Handle_Dialog, UINT Message_Dialog, WPARAM Param_WORD, LPARAM Param_LONG) { + Handle_Set(Handle_Dialog); + BOOL Result_Process = TRUE; + switch (Message_Dialog) { + case WM_CLOSE: + { + DestroyWindow(Handle_Dialog); + return 0; + } + case WM_COMMAND: + { + switch (LOWORD(Param_WORD)) { + case ID_Button_Setting_Clean: + { + Registry::Clean(); + break; + } + case ID_Button_Setting_CleanAndExit: + { + Registry::Clean(); + Destroy(); + DestroyWindow(Handle_Dialog); + break; + } + case ID_Combo_Setting_Language: + { + switch (HIWORD(Param_WORD)) { + case CBN_SELCHANGE: + { + HWND Handle_Combo_Language = GetDlgItem(Handle_Get(), ID_Combo_Setting_Language); + INT Languae = ComboBox_GetCurSel(Handle_Combo_Language); + Text::Language_Set(Languae); + Refresh_All(); + break; + } + default: + { + Result_Process = FALSE; + } + } + break; + } + case ID_Check_Setting_Show: + { + HWND Handle_Check_Show = GetDlgItem(Handle_Get(), ID_Check_Setting_Show); + BOOL Show = Button_GetCheck(Handle_Check_Show); + Dialog_Main::Show_Set(Show); + break; + } + case ID_Check_Setting_Startup: + { + HWND Handle_Check_Startup = GetDlgItem(Handle_Get(), ID_Check_Setting_Startup); + BOOL Startup = Button_GetCheck(Handle_Check_Startup); + Registry::Startup_Set(Startup); + break; + } + default: + { + Result_Process = FALSE; + } + } + break; + } + case WM_HSCROLL: + { + HWND Handle_Slider_Transparency = GetDlgItem(Handle_Dialog, ID_Slider_Transparency); + if (Param_LONG == (LPARAM)Handle_Slider_Transparency) { + INT Position_Slider = HIWORD(Param_WORD); + switch (LOWORD(Param_WORD)) { + case TB_THUMBTRACK: + { + Dialog_Main::Transparency_Set(Position_Slider); + Refresh_Static_Transparency(); + break; + } + case TB_THUMBPOSITION: + { + Registry::Transparency_Save(); + break; + } + default: + { + Result_Process = FALSE; + } + } + } + break; + } + case WM_INITDIALOG: + { + Refresh_All(); + break; + } + case WM_NCDESTROY: + { + Handle_Set(NULL); + return TRUE; + } + default: + { + Result_Process = FALSE; + } + } + return Result_Process; +} + +VOID Dialog_Setting::Refresh_All() { + Refresh_Button_Clean(); + Refresh_Button_CleanAndExit(); + Refresh_Caption(); + Refresh_Check_Setting_Show(); + Refresh_Check_Setting_Startup(); + Refresh_Combo_Setting_Language(); + Refresh_Slider_Transparency(); + Refresh_Static_Language(); + Refresh_Static_Transparency(); +} + +VOID Dialog_Setting::Refresh_Button_Clean() { + SetDlgItemTextW(Handle_Get(), ID_Button_Setting_Clean, Text::Button_Setting_Clean().c_str()); +} + +VOID Dialog_Setting::Refresh_Button_CleanAndExit() { + SetDlgItemTextW(Handle_Get(), ID_Button_Setting_CleanAndExit, Text::Button_Setting_CleanAndExit().c_str()); +} + +VOID Dialog_Setting::Refresh_Caption() { + SetWindowTextW(Handle_Get(), Text::Dialog_Setting_Caption().c_str()); +} + +VOID Dialog_Setting::Refresh_Check_Setting_Show() { + BOOL Show = Dialog_Main::Show_Get(); + HWND Handle_Check_Show = GetDlgItem(Handle_Get(), ID_Check_Setting_Show); + Button_SetCheck(Handle_Check_Show, Show); + SetDlgItemTextW(Handle_Get(), ID_Check_Setting_Show, Text::Menu_Item_Show().c_str()); +} + +VOID Dialog_Setting::Refresh_Check_Setting_Startup() { + BOOL Startup = Registry::Startup_Get(); + HWND Handle_Check_Startup = GetDlgItem(Handle_Get(), ID_Check_Setting_Startup); + Button_SetCheck(Handle_Check_Startup, Startup); + SetDlgItemTextW(Handle_Get(), ID_Check_Setting_Startup, Text::Menu_Item_Startup().c_str()); +} + +VOID Dialog_Setting::Refresh_Combo_Setting_Language() { + HWND Handle_Combo_Language = GetDlgItem(Handle_Get(), ID_Combo_Setting_Language); + ComboBox_ResetContent(Handle_Combo_Language); + for (INT Index = 0; Index <= Text::Language::Total - 1; Index++) { + ComboBox_AddString(Handle_Combo_Language, Text::Name(Index).c_str()); + } + ComboBox_SetCurSel(Handle_Combo_Language, Text::Language_Get()); +} + +VOID Dialog_Setting::Refresh_Slider_Transparency() { + HWND Handle_Slider_Transparency = GetDlgItem(Handle_Get(), ID_Slider_Transparency); + INT Transparency = Registry::Transparency_Get(); + SendMessageW(Handle_Slider_Transparency, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)Transparency); +} + +VOID Dialog_Setting::Refresh_Static_Language() { + SetDlgItemTextW(Handle_Get(), ID_Static_Language, Text::Static_Setting_Language().c_str()); +} + +VOID Dialog_Setting::Refresh_Static_Transparency() { + INT Transparency = Dialog_Main::Transparency_Get(); + std::wstring Transparency_wstring = Text::Static_Setting_Transparency() + std::to_wstring(Transparency) + L"%"; + SetDlgItemTextW(Handle_Get(), ID_Static_Transparency, Transparency_wstring.c_str()); +} diff --git a/NetSpeed/NetSpeed/Dialog_Setting/Dialog_Setting.h b/NetSpeed/NetSpeed/Dialog_Setting/Dialog_Setting.h new file mode 100644 index 0000000..3459916 --- /dev/null +++ b/NetSpeed/NetSpeed/Dialog_Setting/Dialog_Setting.h @@ -0,0 +1,20 @@ +#pragma once +#include +class Dialog_Setting; +#include "../Dialog/Dialog.h" + +class Dialog_Setting :public Dialog { +public: + static INT_PTR WINAPI Process(HWND Handle_Dialog, UINT Message_Dialog, WPARAM Param_WORD, LPARAM Param_LONG); + static VOID Refresh_All(); + static VOID Refresh_Button_Clean(); + static VOID Refresh_Button_CleanAndExit(); + static VOID Refresh_Caption(); + static VOID Refresh_Check_Setting_Show(); + static VOID Refresh_Check_Setting_Startup(); + static VOID Refresh_Combo_Setting_Language(); + static VOID Refresh_Slider_Transparency(); + static VOID Refresh_Static_Language(); + static VOID Refresh_Static_Transparency(); +private: +}; \ No newline at end of file diff --git a/NetSpeed/NetSpeed/Main.cpp b/NetSpeed/NetSpeed/Main.cpp index 90165b7..62ad1bb 100644 --- a/NetSpeed/NetSpeed/Main.cpp +++ b/NetSpeed/NetSpeed/Main.cpp @@ -2,27 +2,29 @@ #include #include #include -#include "DialogMain\DialogMain.h" +#include "Dialog_Main\Dialog_Main.h" #include "Menu\Menu.h" #include "Net\Net.h" #include "NotifyIcon\NotifyIcon.h" #include "Resource\resource.h" +#include "Text\Text.h" -std::wstring file_name; -std::wstring file_path; +std::wstring File_Name; +std::wstring File_Path; -INT WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpszCmdLine, INT iCmdShow) { +INT WINAPI wWinMain(HINSTANCE Handle_Instance, HINSTANCE Handle_Instance_Previous, LPWSTR Commond, INT Show_Commend) { SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE); - WCHAR path_file[MAX_PATH]; - GetModuleFileNameW(NULL, path_file, MAX_PATH); - file_path = path_file; - file_name = PathFindFileNameW(path_file); - file_name.erase(file_name.end() - 4, file_name.end()); + WCHAR Path_File[MAX_PATH]; + GetModuleFileNameW(NULL, Path_File, MAX_PATH); + File_Path = Path_File; + File_Name = PathFindFileNameW(Path_File); + File_Name.erase(File_Name.end() - 4, File_Name.end()); + Text::Init(); Menu::Init(); Net::Init(); - DialogBoxW(hInstance, MAKEINTRESOURCE(DIALOG_MAIN), NULL, DialogMainProcess); + DialogBoxW(Handle_Instance, MAKEINTRESOURCE(ID_Dialog_Main), NULL, Dialog_Main::Process); return 0; } diff --git a/NetSpeed/NetSpeed/Main.h b/NetSpeed/NetSpeed/Main.h index 12f4a91..9a43dec 100644 --- a/NetSpeed/NetSpeed/Main.h +++ b/NetSpeed/NetSpeed/Main.h @@ -1,5 +1,6 @@ #pragma once +#include #include -extern std::wstring file_name; -extern std::wstring file_path; \ No newline at end of file +extern std::wstring File_Name; +extern std::wstring File_Path; diff --git a/NetSpeed/NetSpeed/Menu/MENUITEM.h b/NetSpeed/NetSpeed/Menu/MENUITEM.h deleted file mode 100644 index c31ca25..0000000 --- a/NetSpeed/NetSpeed/Menu/MENUITEM.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -enum { - MENUITEM_SHOW, - MENUITEM_STARTUP, - MENUITEM_CLEAN, - MENUITEM_EXIT -}; diff --git a/NetSpeed/NetSpeed/Menu/Menu.cpp b/NetSpeed/NetSpeed/Menu/Menu.cpp index ab8594b..651b3a5 100644 --- a/NetSpeed/NetSpeed/Menu/Menu.cpp +++ b/NetSpeed/NetSpeed/Menu/Menu.cpp @@ -1,75 +1,88 @@ #include "Menu.h" -#include "MENUITEM.h" +#include +#include "../Dialog_Main/Dialog_Main.h" +#include "../Dialog_Setting/Dialog_Setting.h" #include "../Main.h" -#include "../DialogMain/DialogMain.h" #include "../NotifyIcon/NotifyIcon.h" #include "../Registry/Registry.h" -#include "../Registry/REGISTRYPATH.h" +#include "../Resource/resource.h" +#include "../Text/Text.h" -BOOL Menu::startup_ = FALSE; -HMENU Menu::handle_; -BOOL Menu::show_ = TRUE; +HMENU Menu::Handle_; +BOOL Menu::Show_ = TRUE; +BOOL Menu::Startup_ = FALSE; -VOID Menu::Pop() { - show_ = IsWindowVisible(dialog_main); - if (show_ == TRUE) { - ModifyMenu(handle_, MENUITEM_SHOW, MF_BYPOSITION | MF_STRING, WM_MENUSHOW, L"Hide"); - } - else if (show_ == FALSE) { - ModifyMenu(handle_, MENUITEM_SHOW, MF_BYPOSITION | MF_STRING, WM_MENUSHOW, L"Show"); - } - - LSTATUS startup_status = Registry::Startup_Status(); - if (startup_status == ERROR_SUCCESS) { - startup_ = TRUE; - ModifyMenuW(handle_, MENUITEM_STARTUP, MF_BYPOSITION | MF_STRING | MF_CHECKED, WM_MENUSTARTUP, L"Startup"); - } - else if (startup_status == ERROR_FILE_NOT_FOUND) { - startup_ = FALSE; - ModifyMenuW(handle_, MENUITEM_STARTUP, MF_BYPOSITION | MF_STRING | MF_UNCHECKED, WM_MENUSTARTUP, L"Startup"); - } - else { - MessageBoxW(NULL, L"Can't open registry.", L"Error", MB_OK); - } - - SetForegroundWindow(dialog_main); - POINT cursor; - GetCursorPos(&cursor); - TrackPopupMenu(handle_, TPM_BOTTOMALIGN | TPM_LEFTALIGN, cursor.x, cursor.y, 0, dialog_main, NULL); -} +//public: VOID Menu::Init() { - handle_ = CreatePopupMenu(); - InsertMenuW(handle_, 0, MF_STRING, WM_MENUSHOW, L"Hide"); - InsertMenuW(handle_, 0, MF_STRING | MF_CHECKED, WM_MENUSTARTUP, L"Startup"); - InsertMenuW(handle_, 0, MF_STRING, WM_MENUCLEAN, L"Clean"); - InsertMenuW(handle_, 0, MF_STRING, WM_MENUEXIT, L"Exit"); + Handle_ = CreatePopupMenu(); + for (INT Index = 0; Index <= Item::Total - 1; Index++) { + InsertMenuW(Handle_, 0, MF_STRING, NULL, NULL); + } } -VOID Menu::Item_Clean() { - Registry::Clean(); +VOID Menu::Item_Exit() { + if (Dialog_Setting::Handle_Get() != NULL) { + Dialog_Setting::Destroy(); + } + NotifyIcon::Destroy(); + Dialog_Main::Destroy(); } -VOID Menu::Item_Exit() { - NotifyIcon::Delete(); - EndDialog(dialog_main, 0); +VOID Menu::Item_Setting() { + HWND Handle_Dialog_Setting = Dialog_Setting::Handle_Get(); + if (Handle_Dialog_Setting != NULL) { + SetForegroundWindow(Handle_Dialog_Setting); + return; + } + DialogBoxW(NULL, MAKEINTRESOURCE(ID_Dialog_Setting), NULL, Dialog_Setting::Process); } VOID Menu::Item_Show() { - if (show_ == TRUE) { - ShowWindow(dialog_main, SW_HIDE); + if (Show_ == TRUE) { + ShowWindow(Dialog_Main::Handle_Get(), SW_HIDE); } - else if (show_ == FALSE) { - ShowWindow(dialog_main, SW_SHOW); + else if (Show_ == FALSE) { + ShowWindow(Dialog_Main::Handle_Get(), SW_SHOW); + } + if (Dialog_Setting::Handle_Get() != NULL) { + Dialog_Setting::Refresh_Check_Setting_Show(); } } VOID Menu::Item_Startup() { - if (startup_ == TRUE) { - Registry::Startup_Delete(); + Registry::Startup_Set(!Startup_); + if (Dialog_Setting::Handle_Get() != NULL) { + Dialog_Setting::Refresh_Check_Setting_Startup(); + } +} +VOID Menu::Pop() { + //Show + Show_ = IsWindowVisible(Dialog_Main::Handle_Get()); + if (Show_ == TRUE) { + ModifyMenu(Handle_, Item::Show, MF_BYPOSITION | MF_STRING, WM_MENU_SHOW, Text::Menu_Item_Hide().c_str()); } - else if (startup_ == FALSE) { - Registry::Startup_Create(); + else if (Show_ == FALSE) { + ModifyMenu(Handle_, Item::Show, MF_BYPOSITION | MF_STRING, WM_MENU_SHOW, Text::Menu_Item_Show().c_str()); } -} + //Startup + Startup_ = Registry::Startup_Get(); + if (Startup_ == TRUE) { + ModifyMenuW(Handle_, Item::Startup, MF_BYPOSITION | MF_STRING | MF_CHECKED, WM_MENU_STARTUP, Text::Menu_Item_Startup().c_str()); + } + else if (Startup_ == FALSE) { + ModifyMenuW(Handle_, Item::Startup, MF_BYPOSITION | MF_STRING | MF_UNCHECKED, WM_MENU_STARTUP, Text::Menu_Item_Startup().c_str()); + } + else { + MessageBoxW(NULL, Text::Message_AdapterFindFail().c_str(), NULL, MB_OK); + } + //Setting + ModifyMenu(Handle_, Item::Setting, MF_BYPOSITION | MF_STRING, WM_MENU_SETTING, Text::Menu_Item_Setting().c_str()); + //Exit + ModifyMenu(Handle_, Item::Exit, MF_BYPOSITION | MF_STRING, WM_MENU_EXIT, Text::Menu_Item_Exit().c_str()); + SetForegroundWindow(Dialog_Main::Handle_Get()); + POINT Point_Cursor; + GetCursorPos(&Point_Cursor); + TrackPopupMenu(Handle_, TPM_BOTTOMALIGN | TPM_LEFTALIGN, Point_Cursor.x, Point_Cursor.y, 0, Dialog_Main::Handle_Get(), NULL); +} \ No newline at end of file diff --git a/NetSpeed/NetSpeed/Menu/Menu.h b/NetSpeed/NetSpeed/Menu/Menu.h index 00ae371..d47e821 100644 --- a/NetSpeed/NetSpeed/Menu/Menu.h +++ b/NetSpeed/NetSpeed/Menu/Menu.h @@ -1,18 +1,26 @@ #pragma once #include #include +class Menu; #include "../Resource/WM_USER.h" class Menu { public: - static VOID Pop(); static VOID Init(); - static VOID Item_Clean(); static VOID Item_Exit(); + static VOID Item_Setting(); static VOID Item_Show(); static VOID Item_Startup(); + static VOID Pop(); private: - static BOOL startup_; - static BOOL show_; - static HMENU handle_; + enum Item { + Show, + Startup, + Setting, + Exit, + Total + }; + static HMENU Handle_; + static BOOL Show_; + static BOOL Startup_; }; \ No newline at end of file diff --git a/NetSpeed/NetSpeed/Net/Net.cpp b/NetSpeed/NetSpeed/Net/Net.cpp index c3e6a18..da555ea 100644 --- a/NetSpeed/NetSpeed/Net/Net.cpp +++ b/NetSpeed/NetSpeed/Net/Net.cpp @@ -1,73 +1,89 @@ #include "Net.h" #include -#include "../DialogMain/DialogMain.h" +#include "../Dialog_Main/Dialog_Main.h" #include "../Resource/resource.h" +#include "../Text/Text.h" -HANDLE Net::thread_refresh_; -PMIB_IFROW Net::adapter_info_ = nullptr; -DWORD Net::download_old_ = 0; -DWORD Net::download_new_; -DWORD Net::upload_old_ = 0; -DWORD Net::upload_new_; -BOOL Net::thread_exit_ = FALSE; +HANDLE Net::Thread_Refresh_; +PMIB_IFROW Net::Adapter_Info_ = nullptr; +DWORD Net::Download_Old_ = 0; +DWORD Net::Download_New_; +DWORD Net::Upload_Old_ = 0; +DWORD Net::Upload_New_; +BOOL Net::Thread_Exit_ = FALSE; + +//public: VOID Net::Init() { - adapter_info_ = (PMIB_IFROW)HeapAlloc(GetProcessHeap(), 0, sizeof(MIB_IFROW)); - adapter_info_->dwIndex = 0; + Adapter_Info_ = (PMIB_IFROW)HeapAlloc(GetProcessHeap(), 0, sizeof(MIB_IFROW)); + Adapter_Info_->dwIndex = 0; } -VOID Net::RefreshNetSpeedStart() { - thread_refresh_ = CreateThread(NULL, 0, RefreshNetSpeed, NULL, 0, NULL); +VOID Net::Refresh_Start() { + Thread_Refresh_ = CreateThread(NULL, 0, NetSpeed_Refresh, NULL, 0, NULL); } -VOID Net::AdapterGet() { - if (GetIfEntry(adapter_info_) == NO_ERROR) { - if (adapter_info_->dwType == IF_TYPE_IEEE80211) { + +//private: + +VOID Net::Adapter_Get() { + if (GetIfEntry(Adapter_Info_) == NO_ERROR) { + if (Adapter_Info_->dwType == IF_TYPE_IEEE80211) { return; } } - - //100 just is a joke - for (DWORD index = 0; index <= 100; index++) { - adapter_info_->dwIndex = index; - if (GetIfEntry(adapter_info_) != NO_ERROR) { + DWORD Size_Table = sizeof(MIB_IFTABLE); + MIB_IFTABLE *Adapter_Table = (MIB_IFTABLE *)HeapAlloc(GetProcessHeap(), 0, Size_Table); + GetIfTable(Adapter_Table, &Size_Table, FALSE); + HeapFree(GetProcessHeap(), 0, Adapter_Table); + Adapter_Table = (MIB_IFTABLE *)HeapAlloc(GetProcessHeap(), 0, Size_Table); + GetIfTable(Adapter_Table, &Size_Table, FALSE); + DWORD Adapter_Number = Adapter_Table->dwNumEntries; + HeapFree(GetProcessHeap(), 0, Adapter_Table); + for (DWORD Index = 0; Index <= Adapter_Number - 1; Index++) { + Adapter_Info_->dwIndex = Index; + if (GetIfEntry(Adapter_Info_) != NO_ERROR) { continue; } - if (adapter_info_->dwType == IF_TYPE_IEEE80211) { + if ( + Adapter_Info_->dwType == IF_TYPE_IEEE80211&& + Adapter_Info_->dwSpeed != 0 && + Adapter_Info_->dwOperStatus == IF_OPER_STATUS_OPERATIONAL + ) { return; } } - MessageBoxW(NULL, L"Found no adapter", L"Error", MB_OK); - EndDialog(dialog_main, 0); + MessageBoxW(NULL, Text::Message_AdapterFindFail().c_str(), L"", MB_OK); + EndDialog(Dialog_Main::Handle_Get(), 0); } -DWORD Net::RefreshNetSpeed(LPVOID) { +DWORD Net::NetSpeed_Refresh(LPVOID) { while (TRUE) { - Sleep(1000); - AdapterGet(); - download_new_ = adapter_info_->dwInOctets; - upload_new_ = adapter_info_->dwOutOctets; - DOUBLE download_disparity = (download_new_ - download_old_) / 1024.0; - DOUBLE upload_disparity = (upload_new_ - upload_old_) / 1024.0; - std::wstring unit_download = L"K"; - std::wstring unit_upload = L"K"; - if (download_disparity > 1024) { - download_disparity = download_disparity / 1024.0; - unit_download = L"M"; + Adapter_Get(); + Download_New_ = Adapter_Info_->dwInOctets; + Upload_New_ = Adapter_Info_->dwOutOctets; + DOUBLE Download_Disparity = (Download_New_ - Download_Old_) / 1024.0; + DOUBLE Upload_Disparity = (Upload_New_ - Upload_Old_) / 1024.0; + std::wstring Unit_Download = L"K"; + std::wstring Unit_Upload = L"K"; + if (Download_Disparity > 1024) { + Download_Disparity = Download_Disparity / 1024.0; + Unit_Download = L"M"; } - if (upload_disparity > 1024) { - upload_disparity = upload_disparity / 1024.0; - unit_upload = L"M"; + if (Upload_Disparity > 1024) { + Upload_Disparity = Upload_Disparity / 1024.0; + Unit_Upload = L"M"; } - std::wstring download_speed = std::to_wstring(download_disparity + 0.05); - std::wstring upload_speed = std::to_wstring(upload_disparity + 0.05); - download_speed.erase(download_speed.end() - 5, download_speed.end()); - upload_speed.erase(upload_speed.end() - 5, upload_speed.end()); - download_speed.append(unit_download); - upload_speed.append(unit_upload); - download_old_ = download_new_; - upload_old_ = upload_new_; - SetDlgItemTextW(dialog_main, STATIC_DOWNLOAD, download_speed.c_str()); - SetDlgItemTextW(dialog_main, STATIC_UPLOAD, upload_speed.c_str()); + std::wstring Download_Speed = std::to_wstring(Download_Disparity + 0.05); + std::wstring Upload_Speed = std::to_wstring(Upload_Disparity + 0.05); + Download_Speed.erase(Download_Speed.end() - 5, Download_Speed.end()); + Upload_Speed.erase(Upload_Speed.end() - 5, Upload_Speed.end()); + Download_Speed.append(Unit_Download); + Upload_Speed.append(Unit_Upload); + Download_Old_ = Download_New_; + Upload_Old_ = Upload_New_; + SetDlgItemTextW(Dialog_Main::Handle_Get(), ID_Static_Download, Download_Speed.c_str()); + SetDlgItemTextW(Dialog_Main::Handle_Get(), ID_Static_Upload, Upload_Speed.c_str()); + Sleep(1000); } return 0; } diff --git a/NetSpeed/NetSpeed/Net/Net.h b/NetSpeed/NetSpeed/Net/Net.h index fcd6deb..4319081 100644 --- a/NetSpeed/NetSpeed/Net/Net.h +++ b/NetSpeed/NetSpeed/Net/Net.h @@ -1,19 +1,20 @@ #pragma once #include #include +class Net; class Net { public: static VOID Init(); - static VOID RefreshNetSpeedStart(); + static VOID Refresh_Start(); private: - static HANDLE thread_refresh_; - static PMIB_IFROW adapter_info_; - static DWORD download_old_; - static DWORD download_new_; - static DWORD upload_old_; - static DWORD upload_new_; - static BOOL thread_exit_; - static VOID AdapterGet(); - static DWORD WINAPI RefreshNetSpeed(LPVOID); + static VOID Adapter_Get(); + static DWORD WINAPI NetSpeed_Refresh(LPVOID); + static PMIB_IFROW Adapter_Info_; + static DWORD Download_New_; + static DWORD Download_Old_; + static BOOL Thread_Exit_; + static HANDLE Thread_Refresh_; + static DWORD Upload_Old_; + static DWORD Upload_New_; }; \ No newline at end of file diff --git a/NetSpeed/NetSpeed/NetSpeed.vcxproj b/NetSpeed/NetSpeed/NetSpeed.vcxproj index f36ea09..75a9b38 100644 --- a/NetSpeed/NetSpeed/NetSpeed.vcxproj +++ b/NetSpeed/NetSpeed/NetSpeed.vcxproj @@ -22,25 +22,27 @@ - + + + - - - + - + + + @@ -49,21 +51,21 @@ 15.0 {3904678E-7C22-48DD-87A0-D938897C53BF} NetSpeed - 10.0.15063.0 + 10.0.16299.0 Application true v141 - MultiByte + Unicode Application false v141 true - MultiByte + Unicode Application diff --git a/NetSpeed/NetSpeed/NetSpeed.vcxproj.filters b/NetSpeed/NetSpeed/NetSpeed.vcxproj.filters index 8bc2133..216f546 100644 --- a/NetSpeed/NetSpeed/NetSpeed.vcxproj.filters +++ b/NetSpeed/NetSpeed/NetSpeed.vcxproj.filters @@ -14,12 +14,21 @@ {7d05ce1a-31d6-4fe5-8ff9-cdb6815dec7c} - - {a96598b7-a1ee-41f1-8973-d66e51feb8ca} - {d9257cf2-b939-421a-96fa-b6223dd76544} + + {ea13c3f3-1a7f-44bb-86c1-3ca194467bd3} + + + {437cdaed-3196-47b9-8bed-1c4e45ce4461} + + + {a96598b7-a1ee-41f1-8973-d66e51feb8ca} + + + {c9e839f1-b6a3-4f7a-9376-038f482f3e4f} + @@ -42,21 +51,21 @@ NotifyIcon - - DialogMain - - - Menu - Registry - - Registry - - - Registry + + Text + + + Dialog_Main + + + Dialog_Setting + + + Dialog @@ -70,12 +79,18 @@ NotifyIcon - - DialogMain - Registry + + Text + + + Dialog_Main + + + Dialog_Setting + diff --git a/NetSpeed/NetSpeed/NotifyIcon/NotifyIcon.cpp b/NetSpeed/NetSpeed/NotifyIcon/NotifyIcon.cpp index ef83629..d6bdfcc 100644 --- a/NetSpeed/NetSpeed/NotifyIcon/NotifyIcon.cpp +++ b/NetSpeed/NetSpeed/NotifyIcon/NotifyIcon.cpp @@ -1,22 +1,24 @@ #include "NotifyIcon.h" -#include "../DialogMain/DialogMain.h" +#include "../Dialog_Main/Dialog_Main.h" #include "../Resource/resource.h" #include "../Resource/WM_USER.h" -NOTIFYICONDATAW NotifyIcon::data_; +NOTIFYICONDATAW NotifyIcon::Data_; -VOID NotifyIcon::Init() { - data_.cbSize = sizeof(data_); - data_.hIcon = (HICON)LoadImageW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(ICON_MAIN), IMAGE_ICON, 0, 0, LR_SHARED); - data_.uCallbackMessage = WM_NOTIFYICON; - data_.hWnd = dialog_main; - data_.uID = NOTIFYICON_MAIN; - data_.uVersion = NOTIFYICON_VERSION_4; - wcscpy_s(data_.szTip, L"NetSpeed"); - data_.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE; - Shell_NotifyIconW(NIM_ADD, &data_); +//public: + +VOID NotifyIcon::Destroy() { + Shell_NotifyIconW(NIM_DELETE, &Data_); } -VOID NotifyIcon::Delete() { - Shell_NotifyIconW(NIM_DELETE, &data_); +VOID NotifyIcon::Init() { + Data_.cbSize = sizeof(Data_); + Data_.hIcon = (HICON)LoadImageW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(ID_Icon_Main), IMAGE_ICON, 0, 0, LR_SHARED); + Data_.uCallbackMessage = WM_NOTIFYICON; + Data_.hWnd = Dialog_Main::Handle_Get(); + Data_.uID = ID_NotifyIcon_Main; + Data_.uVersion = NOTIFYICON_VERSION_4; + wcscpy_s(Data_.szTip, L"NetSpeed"); + Data_.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE; + Shell_NotifyIconW(NIM_ADD, &Data_); } diff --git a/NetSpeed/NetSpeed/NotifyIcon/NotifyIcon.h b/NetSpeed/NetSpeed/NotifyIcon/NotifyIcon.h index b251dd4..bacb158 100644 --- a/NetSpeed/NetSpeed/NotifyIcon/NotifyIcon.h +++ b/NetSpeed/NetSpeed/NotifyIcon/NotifyIcon.h @@ -1,10 +1,11 @@ #pragma once #include +class NotifyIcon; class NotifyIcon { public: + static VOID Destroy(); static VOID Init(); - static VOID Delete(); private: - static NOTIFYICONDATAW data_; + static NOTIFYICONDATAW Data_; }; \ No newline at end of file diff --git a/NetSpeed/NetSpeed/Registry/REGISTRYPATH.h b/NetSpeed/NetSpeed/Registry/REGISTRYPATH.h deleted file mode 100644 index b007296..0000000 --- a/NetSpeed/NetSpeed/Registry/REGISTRYPATH.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -#define REGISTRYPATH_STARTUP L"Software\\Microsoft\\Windows\\CurrentVersion\\Run" -#define REGISTRYPATH_POSITION L"Software\\NetSpeed" \ No newline at end of file diff --git a/NetSpeed/NetSpeed/Registry/REGISTRYVALUE.h b/NetSpeed/NetSpeed/Registry/REGISTRYVALUE.h deleted file mode 100644 index d6932bd..0000000 --- a/NetSpeed/NetSpeed/Registry/REGISTRYVALUE.h +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once - -#define REGISTRYVALUE_POSITION_X L"position_x" -#define REGISTRYVALUE_POSITION_Y L"position_y" diff --git a/NetSpeed/NetSpeed/Registry/Registry.cpp b/NetSpeed/NetSpeed/Registry/Registry.cpp index 3658732..cc4182a 100644 --- a/NetSpeed/NetSpeed/Registry/Registry.cpp +++ b/NetSpeed/NetSpeed/Registry/Registry.cpp @@ -1,118 +1,131 @@ #include "Registry.h" -#include "REGISTRYPATH.h" -#include "REGISTRYVALUE.h" +#include "../Dialog_Main/Dialog_Main.h" +#include "../Dialog_Setting/Dialog_Setting.h" #include "../Main.h" -#include "../DialogMain/DialogMain.h" +#include "../Text/Text.h" + +const std::wstring Registry::Path_NetSpeed_ = L"Software\\NetSpeed"; +const std::wstring Registry::Path_Startup_ = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run"; +const std::wstring Registry::Value_Position_X_ = L"Position_X"; +const std::wstring Registry::Value_Position_Y_ = L"Position_Y"; +const std::wstring Registry::Value_Transparency_ = L"Transparency"; +const std::wstring Registry::Value_Language_ = L"Language"; + +//public: VOID Registry::Clean() { - Startup_Delete(); - Position_Delete(); - MessageBoxW(NULL, L"Startup and Position have been cleanned.", L"Complete", MB_OK); + Startup_Set(FALSE); + RegDeleteTreeW(HKEY_CURRENT_USER, Path_NetSpeed_.c_str()); + MessageBoxW(NULL, Text::Message_CleanFinish().c_str(), L"", MB_OK); } -VOID Registry::Position_Create() { - HKEY registry_key; - RegCreateKeyExW( - HKEY_CURRENT_USER, - REGISTRYPATH_POSITION, - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - ®istry_key, - NULL - ); - RECT dialog_rect; - GetWindowRect(dialog_main, &dialog_rect); - MapWindowPoints(HWND_DESKTOP, GetParent(dialog_main), (LPPOINT)&dialog_rect, sizeof(RECT) / sizeof(POINT)); - RegSetValueExW( - registry_key, - REGISTRYVALUE_POSITION_X, - 0, - REG_DWORD, - (PBYTE)&dialog_rect.left, - sizeof(LONG) - ); - RegSetValueExW( - registry_key, - REGISTRYVALUE_POSITION_Y, - 0, - REG_DWORD, - (PBYTE)&dialog_rect.top, - sizeof(LONG) - ); - RegCloseKey(registry_key); +std::wstring Registry::Language_Get() { + WCHAR Language[100]; + LSTATUS Status_Language = Value_Get(Value_Language_, RRF_RT_REG_SZ, Language); + if (Status_Language == ERROR_SUCCESS) { + return Language; + } + std::wstring Language_Name = Text::Name(); + Value_Set(Value_Language_.c_str(), REG_SZ, (PBYTE)Language_Name.c_str(), Language_Name.length() * sizeof(WCHAR)); + return Language_Name; } -VOID Registry::Position_Delete() { - RegDeleteTreeW(HKEY_CURRENT_USER, REGISTRYPATH_POSITION); +VOID Registry::Language_Save() { + std::wstring Language_Name = Text::Name(); + Value_Set(Value_Language_.c_str(), REG_SZ, (PBYTE)Language_Name.c_str(), Language_Name.length() * sizeof(WCHAR)); } POINT Registry::Position_Get() { - POINT poisition = {-1, -1}; - DWORD data_size; - RegGetValueW( - HKEY_CURRENT_USER, - REGISTRYPATH_POSITION, - REGISTRYVALUE_POSITION_X, - RRF_RT_REG_DWORD, - NULL, - &poisition.x, - &data_size - ); - RegGetValueW( + POINT Poisition; + LSTATUS Status_Position_X = Value_Get(Value_Position_X_, RRF_RT_REG_DWORD, &Poisition.x); + LSTATUS Status_Position_Y = Value_Get(Value_Position_Y_, RRF_RT_REG_DWORD, &Poisition.y); + if (Status_Position_X != ERROR_SUCCESS || Status_Position_Y != ERROR_SUCCESS) { + Position_Save(); + return Position_Get(); + } + return Poisition; +} + +VOID Registry::Position_Save() { + POINT Point_Dialog = Dialog_Main::Position_Get(); + Value_Set(Value_Position_X_.c_str(), REG_DWORD, (PBYTE)&Point_Dialog.x, sizeof(LONG)); + Value_Set(Value_Position_Y_.c_str(), REG_DWORD, (PBYTE)&Point_Dialog.y, sizeof(LONG)); +} + +BOOL Registry::Startup_Get() { + LSTATUS Status_Registry_Startup = Value_Get(File_Name, RRF_RT_REG_SZ, NULL); + if (Status_Registry_Startup != ERROR_SUCCESS) { + return FALSE; + } + //Rest the .exe path + Value_Set(File_Name, REG_SZ, (PBYTE)File_Path.c_str(), File_Path.length() * sizeof(WCHAR)); + return TRUE; +} + +VOID Registry::Startup_Set(BOOL Startup) { + if (Startup == TRUE) { + Value_Set(File_Name, REG_SZ, (PBYTE)File_Path.c_str(), File_Path.length() * sizeof(WCHAR)); + } + else { + RegDeleteKeyValueW(HKEY_CURRENT_USER, Path_Startup_.c_str(), File_Name.c_str()); + } + if (Dialog_Setting::Handle_Get() != NULL) { + Dialog_Setting::Refresh_Check_Setting_Startup(); + } +} + +INT Registry::Transparency_Get() { + INT Transparency; + LSTATUS Status_Transparency = Value_Get(Value_Transparency_, RRF_RT_REG_DWORD, &Transparency); + if (Status_Transparency != ERROR_SUCCESS) { + Transparency_Save(); + return Transparency_Get(); + } + return Transparency; +} + +VOID Registry::Transparency_Save() { + INT Transparency = Dialog_Main::Transparency_Get(); + Value_Set(Value_Transparency_, REG_DWORD, (PBYTE)&Transparency, sizeof(LONG)); +} + +//private: + +LSTATUS Registry::Value_Get(std::wstring Value, DWORD Flag, PVOID Data) { + std::wstring Path = Path_NetSpeed_; + if (Value == File_Name) { + Path = Path_Startup_; + } + DWORD Size_Data; + LSTATUS Status = RegGetValueW( HKEY_CURRENT_USER, - REGISTRYPATH_POSITION, - REGISTRYVALUE_POSITION_Y, - RRF_RT_REG_DWORD, + Path.c_str(), + Value.c_str(), + Flag, NULL, - &poisition.y, - &data_size + Data, + &Size_Data ); - return poisition; + return Status; } -VOID Registry::Startup_Create() { - HKEY registry_key; +VOID Registry::Value_Set(std::wstring Value, DWORD Type, PBYTE Data, DWORD Size) { + HKEY Handle_Key; + std::wstring Path = Path_NetSpeed_; + if (Value == File_Name) { + Path = Path_Startup_; + } RegCreateKeyExW( HKEY_CURRENT_USER, - REGISTRYPATH_STARTUP, + Path.c_str(), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, - ®istry_key, + &Handle_Key, NULL ); - RegSetValueExW( - registry_key, - file_name.c_str(), - 0, - REG_SZ, - (PBYTE)file_path.c_str(), - file_path.length() * sizeof(WCHAR) - ); - RegCloseKey(registry_key); -} - -VOID Registry::Startup_Delete() { - RegDeleteKeyValueW(HKEY_CURRENT_USER, REGISTRYPATH_STARTUP, file_name.c_str()); -} - -LSTATUS Registry::Startup_Status() { - LSTATUS registry_startup = RegGetValueW( - HKEY_CURRENT_USER, - REGISTRYPATH_STARTUP, - file_name.c_str(), - RRF_RT_REG_SZ, - NULL, - NULL, - NULL - ); - if (registry_startup == ERROR_SUCCESS) { - Startup_Create(); - } - return registry_startup; + RegSetValueExW(Handle_Key, Value.c_str(), 0, Type, Data, Size); + RegCloseKey(Handle_Key); } diff --git a/NetSpeed/NetSpeed/Registry/Registry.h b/NetSpeed/NetSpeed/Registry/Registry.h index b2b8f93..073fbff 100644 --- a/NetSpeed/NetSpeed/Registry/Registry.h +++ b/NetSpeed/NetSpeed/Registry/Registry.h @@ -1,14 +1,27 @@ #pragma once #include +#include +class Registry; class Registry { public: - static VOID Clean(); - static VOID Position_Create(); - static VOID Position_Delete(); - static POINT Position_Get(); - static VOID Startup_Create(); - static VOID Startup_Delete(); - static LSTATUS Startup_Status(); + static VOID Clean(); + static std::wstring Language_Get(); + static VOID Language_Save(); + static POINT Position_Get(); + static VOID Position_Save(); + static BOOL Startup_Get(); + static VOID Startup_Set(BOOL Startup); + static INT Transparency_Get(); + static VOID Transparency_Save(); +private: + static LSTATUS Value_Get(std::wstring Value, DWORD Flag, PVOID Data); + static VOID Value_Set(std::wstring Value, DWORD Type, PBYTE Data, DWORD Size); + static const std::wstring Path_NetSpeed_; + static const std::wstring Path_Startup_; + static const std::wstring Value_Position_X_; + static const std::wstring Value_Position_Y_; + static const std::wstring Value_Transparency_; + static const std::wstring Value_Language_; private: }; \ No newline at end of file diff --git a/NetSpeed/NetSpeed/Resource/NetSpeed.rc b/NetSpeed/NetSpeed/Resource/NetSpeed.rc index a97f841..2692bcd 100644 Binary files a/NetSpeed/NetSpeed/Resource/NetSpeed.rc and b/NetSpeed/NetSpeed/Resource/NetSpeed.rc differ diff --git a/NetSpeed/NetSpeed/Resource/RCa09792 b/NetSpeed/NetSpeed/Resource/RCa09792 new file mode 100644 index 0000000..bd4e76b Binary files /dev/null and b/NetSpeed/NetSpeed/Resource/RCa09792 differ diff --git a/NetSpeed/NetSpeed/Resource/RCa13076 b/NetSpeed/NetSpeed/Resource/RCa13076 new file mode 100644 index 0000000..2663dd3 Binary files /dev/null and b/NetSpeed/NetSpeed/Resource/RCa13076 differ diff --git a/NetSpeed/NetSpeed/Resource/RCb13076 b/NetSpeed/NetSpeed/Resource/RCb13076 new file mode 100644 index 0000000..4e79b8c Binary files /dev/null and b/NetSpeed/NetSpeed/Resource/RCb13076 differ diff --git a/NetSpeed/NetSpeed/Resource/WM_USER.h b/NetSpeed/NetSpeed/Resource/WM_USER.h index b7693c3..a38fea3 100644 --- a/NetSpeed/NetSpeed/Resource/WM_USER.h +++ b/NetSpeed/NetSpeed/Resource/WM_USER.h @@ -3,8 +3,8 @@ enum { WM_NOTIFYICON = WM_USER + 1, - WM_MENUSHOW, - WM_MENUSTARTUP, - WM_MENUCLEAN, - WM_MENUEXIT + WM_MENU_EXIT, + WM_MENU_SETTING, + WM_MENU_SHOW, + WM_MENU_STARTUP }; \ No newline at end of file diff --git a/NetSpeed/NetSpeed/Resource/resource.h b/NetSpeed/NetSpeed/Resource/resource.h index 8e34edc..926bb67 100644 --- a/NetSpeed/NetSpeed/Resource/resource.h +++ b/NetSpeed/NetSpeed/Resource/resource.h @@ -2,20 +2,29 @@ // Microsoft Visual C++ generated include file. // Used by NetSpeed.rc // -#define VERSION_MAIN 1 -#define DIALOG_MAIN 101 -#define NOTIFYICON_MAIN 102 -#define ICON_MAIN 103 -#define STATIC_DOWNLOAD 1001 -#define STATIC_UPLOAD 1002 +#define ID_Version_Main 1 +#define ID_Dialog_Main 101 +#define ID_NotifyIcon_Main 102 +#define ID_Icon_Main 103 +#define ID_Dialog_Setting 107 +#define ID_Static_Download 1001 +#define ID_Static_Upload 1002 +#define ID_Slider_Transparency 1003 +#define ID_Combo_Setting_Language 1004 +#define ID_Check_Setting_Startup 1005 +#define ID_Check_Setting_Show 1006 +#define ID_Button_Setting_Clean 1007 +#define ID_Button_Setting_CleanAndExit 1008 +#define ID_Static_Transparency 1009 +#define ID_Static_Language 1010 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 107 +#define _APS_NEXT_RESOURCE_VALUE 112 #define _APS_NEXT_COMMAND_VALUE 40006 -#define _APS_NEXT_CONTROL_VALUE 1003 +#define _APS_NEXT_CONTROL_VALUE 1014 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/NetSpeed/NetSpeed/Text/Text.cpp b/NetSpeed/NetSpeed/Text/Text.cpp new file mode 100644 index 0000000..4b8b651 --- /dev/null +++ b/NetSpeed/NetSpeed/Text/Text.cpp @@ -0,0 +1,113 @@ +#include "Text.h" +#include "../Registry/Registry.h" + +INT Text::Language_ = Text::Language::English; +std::vector Text::List_(Text::Language::Total); + +//public: + +std::wstring Text::Button_Setting_Clean() { + return List_[Language_].Button_Setting_Clean_; +} + +std::wstring Text::Button_Setting_CleanAndExit() { + return List_[Language_].Button_Setting_CleanAndExit_; +} + +std::wstring Text::Check_Setting_Show() { + return List_[Language_].Check_Setting_Show_; +} + +std::wstring Text::Check_Setting_Startup() { + return List_[Language_].Check_Setting_Startup_; +} + +std::wstring Text::Dialog_Setting_Caption() { + return List_[Language_].Dialog_Setting_Caption_; +} + +VOID Text::Init() { + List_[Language::Chinese_Simplified].Menu_Item_Clean_ = L"清理注册表"; + List_[Language::Chinese_Simplified].Menu_Item_Exit_ = L"退出"; + List_[Language::Chinese_Simplified].Menu_Item_Hide_ = L"隐藏"; + List_[Language::Chinese_Simplified].Menu_Item_Setting_ = L"设置"; + List_[Language::Chinese_Simplified].Menu_Item_Show_ = L"显示"; + List_[Language::Chinese_Simplified].Menu_Item_Startup_ = L"开机自启"; + List_[Language::Chinese_Simplified].Message_AdapterFindFail_ = L"查找网卡失败。"; + List_[Language::Chinese_Simplified].Message_RegistryOpenFail_ = L"打开注册表失败。"; + List_[Language::Chinese_Simplified].Name_ = L"简体中文"; + List_[Language::Chinese_Simplified].Button_Setting_Clean_ = L"清理"; + List_[Language::Chinese_Simplified].Button_Setting_CleanAndExit_ = L"清理并退出"; + List_[Language::Chinese_Simplified].Dialog_Setting_Caption_ = L"设置"; + List_[Language::Chinese_Simplified].Static_Setting_Language_ = L"语言"; + List_[Language::Chinese_Simplified].Static_Setting_Transparency_ = L"透明度:"; + std::wstring Language = Registry::Language_Get(); + for (INT Index = 0; Index <= Language::Total - 1; Index++) { + if (Name(Index) == Language) { + Language_ = Index; + break; + } + } + Registry::Language_Save(); +} + +INT Text::Language_Get() { + return Language_; +} + +VOID Text::Language_Set(INT Language) { + Language_ = Language; + Registry::Language_Save(); +} + +std::wstring Text::Menu_Item_Clean() { + return List_[Language_].Menu_Item_Clean_; +} + +std::wstring Text::Menu_Item_Exit() { + return List_[Language_].Menu_Item_Exit_; +} + +std::wstring Text::Menu_Item_Hide() { + return List_[Language_].Menu_Item_Hide_; +} + +std::wstring Text::Menu_Item_Setting() { + return List_[Language_].Menu_Item_Setting_; +} + +std::wstring Text::Menu_Item_Show() { + return List_[Language_].Menu_Item_Show_; +} + +std::wstring Text::Menu_Item_Startup() { + return List_[Language_].Menu_Item_Startup_; +} + +std::wstring Text::Message_AdapterFindFail() { + return List_[Language_].Message_AdapterFindFail_; +} + +std::wstring Text::Message_RegistryOpenFail() { + return List_[Language_].Message_RegistryOpenFail_; +} + +std::wstring Text::Message_CleanFinish() { + return List_[Language_].Message_CleanFinish_; +} + +std::wstring Text::Name() { + return List_[Language_].Name_; +} + +std::wstring Text::Name(INT Language) { + return List_[Language].Name_; +} + +std::wstring Text::Static_Setting_Language() { + return List_[Language_].Static_Setting_Language_; +} + +std::wstring Text::Static_Setting_Transparency() { + return List_[Language_].Static_Setting_Transparency_; +} diff --git a/NetSpeed/NetSpeed/Text/Text.h b/NetSpeed/NetSpeed/Text/Text.h new file mode 100644 index 0000000..d407e41 --- /dev/null +++ b/NetSpeed/NetSpeed/Text/Text.h @@ -0,0 +1,54 @@ +#pragma once +#include +#include +class Text; + +class Text { +public: + enum Language { + English, + Chinese_Simplified, + Total + }; + static std::wstring Button_Setting_Clean(); + static std::wstring Button_Setting_CleanAndExit(); + static std::wstring Check_Setting_Show(); + static std::wstring Check_Setting_Startup(); + static std::wstring Dialog_Setting_Caption(); + static VOID Init(); + static INT Language_Get(); + static VOID Language_Set(INT Language); + static std::wstring Menu_Item_Clean(); + static std::wstring Menu_Item_Exit(); + static std::wstring Menu_Item_Hide(); + static std::wstring Menu_Item_Setting(); + static std::wstring Menu_Item_Show(); + static std::wstring Menu_Item_Startup(); + static std::wstring Message_CleanFinish(); + static std::wstring Message_AdapterFindFail(); + static std::wstring Message_RegistryOpenFail(); + static std::wstring Name(); + static std::wstring Name(INT Language); + static std::wstring Static_Setting_Language(); + static std::wstring Static_Setting_Transparency(); +private: + static std::vector List_; + static INT Language_; + std::wstring Menu_Item_Clean_ = L"Clean"; + std::wstring Menu_Item_Exit_ = L"Exit"; + std::wstring Menu_Item_Hide_ = L"Hide"; + std::wstring Menu_Item_Setting_ = L"Setting"; + std::wstring Menu_Item_Show_ = L"Show"; + std::wstring Menu_Item_Startup_ = L"Startup"; + std::wstring Message_AdapterFindFail_ = L"Can't find adapter."; + std::wstring Message_RegistryOpenFail_ = L"Can't open registry."; + std::wstring Message_CleanFinish_ = L"All registry has been cleanned."; + std::wstring Name_ = L"English"; + std::wstring Button_Setting_Clean_ = L"Clean"; + std::wstring Button_Setting_CleanAndExit_ = L"Clean And Exit"; + std::wstring Dialog_Setting_Caption_ = L"Setting"; + std::wstring Static_Setting_Language_ = L"Language"; + std::wstring Static_Setting_Transparency_ = L"Transparency:"; + std::wstring Check_Setting_Show_ = L"Show"; + std::wstring Check_Setting_Startup_ = L"Startup"; +};