Add dialog functionality
This commit is contained in:
		
							parent
							
								
									a0437093fb
								
							
						
					
					
						commit
						163a583fa4
					
				
										
											Binary file not shown.
										
									
								
							| @ -80,10 +80,11 @@ | |||||||
|       <MultiProcessorCompilation>true</MultiProcessorCompilation> |       <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||||
|     </ClCompile> |     </ClCompile> | ||||||
|     <Link> |     <Link> | ||||||
|       <SubSystem>Console</SubSystem> |       <SubSystem>Windows</SubSystem> | ||||||
|       <EnableCOMDATFolding>true</EnableCOMDATFolding> |       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||||
|       <OptimizeReferences>true</OptimizeReferences> |       <OptimizeReferences>true</OptimizeReferences> | ||||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> |       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||||
|  |       <EntryPointSymbol>mainCRTStartup</EntryPointSymbol> | ||||||
|     </Link> |     </Link> | ||||||
|     <PreBuildEvent> |     <PreBuildEvent> | ||||||
|       <Command>PreBuild.bat</Command> |       <Command>PreBuild.bat</Command> | ||||||
|  | |||||||
| @ -2,16 +2,21 @@ | |||||||
| // Microsoft Visual C++ generated include file.
 | // Microsoft Visual C++ generated include file.
 | ||||||
| // Used by WinChat.rc
 | // Used by WinChat.rc
 | ||||||
| //
 | //
 | ||||||
| #define IDD_MAINDIALOG                  101 | #define IDD_DIALOGMAIN                  101 | ||||||
|  | #define IDR_MENUMAIN                    104 | ||||||
| #define IDC_STATICTITLE                 1001 | #define IDC_STATICTITLE                 1001 | ||||||
|  | #define IDC_BUTTONEXIT                  1003 | ||||||
|  | #define IDC_BUTTONCONNECT               1005 | ||||||
|  | #define ID_FILE_EXIT                    40001 | ||||||
|  | #define ID_HELP_ABOUT                   40002 | ||||||
| 
 | 
 | ||||||
| // Next default values for new objects
 | // Next default values for new objects
 | ||||||
| // 
 | // 
 | ||||||
| #ifdef APSTUDIO_INVOKED | #ifdef APSTUDIO_INVOKED | ||||||
| #ifndef APSTUDIO_READONLY_SYMBOLS | #ifndef APSTUDIO_READONLY_SYMBOLS | ||||||
| #define _APS_NEXT_RESOURCE_VALUE        103 | #define _APS_NEXT_RESOURCE_VALUE        106 | ||||||
| #define _APS_NEXT_COMMAND_VALUE         40001 | #define _APS_NEXT_COMMAND_VALUE         40003 | ||||||
| #define _APS_NEXT_CONTROL_VALUE         1002 | #define _APS_NEXT_CONTROL_VALUE         1006 | ||||||
| #define _APS_NEXT_SYMED_VALUE           101 | #define _APS_NEXT_SYMED_VALUE           101 | ||||||
| #endif | #endif | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -1,28 +1,82 @@ | |||||||
| #include "Application.h" | #include "Application.h" | ||||||
| 
 | 
 | ||||||
|  | #include <iostream> | ||||||
|  | #include <format> | ||||||
|  | 
 | ||||||
| #include "../resource.h" | #include "../resource.h" | ||||||
| 
 | 
 | ||||||
|  | //This pragma enables visual styles, which makes dialogs and their controls look modern.
 | ||||||
|  | #pragma comment(linker,"\"/manifestdependency:type='win32' \ | ||||||
|  | name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ | ||||||
|  | processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") | ||||||
|  | 
 | ||||||
| namespace wc { | namespace wc { | ||||||
| 	Application::Application(std::string& appName, std::string& appVersion) | 	Application::Application(std::string& appName, std::string& appVersion) | ||||||
| 		: m_appName(appName) | 		: m_appName(appName) | ||||||
| 		, m_appVersion(appVersion) | 		, m_appVersion(appVersion) | ||||||
| 	{ | 	{ | ||||||
| 		std::printf("%s %s\n", m_appName.c_str(), m_appVersion.c_str()); | 		std::cout << std::format("{} {}", m_appName, m_appVersion); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	void Application::run() { | 	void Application::run() { | ||||||
| 		HINSTANCE hInst = GetModuleHandle(NULL); | 		HINSTANCE hInst = GetModuleHandle(NULL); | ||||||
| 		DialogBox(hInst, MAKEINTRESOURCE(IDD_MAINDIALOG), nullptr, (DLGPROC)dlgProc); | 		DialogBoxParam(hInst, MAKEINTRESOURCE(IDD_DIALOGMAIN), nullptr, (DLGPROC)dlgProc, reinterpret_cast<LPARAM>(this)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	BOOL CALLBACK Application::dlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { | 	BOOL CALLBACK Application::dlgProc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { | ||||||
|  | 		static Application* app = nullptr; | ||||||
|  | 
 | ||||||
| 		switch (msg) { | 		switch (msg) { | ||||||
| 			case WM_INITDIALOG: | 			case WM_INITDIALOG: { | ||||||
|  | 				app = reinterpret_cast<Application*>(lParam); | ||||||
|  | 
 | ||||||
|  | 				std::wstring appName(app->m_appName.begin(), app->m_appName.end()); | ||||||
|  | 				SetWindowText(dlg, appName.c_str()); | ||||||
|  | 
 | ||||||
|  | 				POINT pt = { }; | ||||||
|  | 				GetCursorPos(&pt); | ||||||
|  | 				HMONITOR mon = MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST); | ||||||
|  | 				MONITORINFO mi = { }; | ||||||
|  | 				mi.cbSize = sizeof(mi); | ||||||
|  | 				GetMonitorInfo(mon, &mi); | ||||||
|  | 
 | ||||||
|  | 				SetWindowPos(dlg, nullptr, mi.rcMonitor.left + 100, mi.rcMonitor.top + 100, 0, 0, SWP_NOSIZE | SWP_NOZORDER); | ||||||
|  | 
 | ||||||
|  | 				SetDlgItemText(dlg, IDC_STATICTITLE, appName.c_str()); | ||||||
|  | 
 | ||||||
|  | 				LOGFONT lFont = { }; | ||||||
|  | 				lFont.lfHeight = 50; | ||||||
|  | 
 | ||||||
|  | 				HFONT font = CreateFontIndirect(&lFont); | ||||||
|  | 				SendMessage(GetDlgItem(dlg, IDC_STATICTITLE), WM_SETFONT, reinterpret_cast<LPARAM>(font), NULL); | ||||||
|  | 
 | ||||||
|  | 				return TRUE; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			case WM_COMMAND: | ||||||
|  | 				switch (LOWORD(wParam)) { | ||||||
|  | 					case IDC_BUTTONCONNECT: | ||||||
| 
 | 
 | ||||||
| 						return TRUE; | 						return TRUE; | ||||||
| 
 | 
 | ||||||
|  | 					case ID_HELP_ABOUT: { | ||||||
|  | 						std::wstring appName(app->m_appName.begin(), app->m_appName.end()); | ||||||
|  | 						std::wstring appVer(app->m_appVersion.begin(), app->m_appVersion.end()); | ||||||
|  | 						std::wstring aboutStr = std::format(L"{} {}\nGrayson Riffe 2023", appName, appVer); | ||||||
|  | 						MessageBox(dlg, aboutStr.c_str(), L"About", MB_OK); | ||||||
|  | 						return TRUE; | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					case IDC_BUTTONEXIT: | ||||||
|  | 					case ID_FILE_EXIT: | ||||||
|  | 						PostMessage(dlg, WM_CLOSE, NULL, NULL); | ||||||
|  | 						return TRUE; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				return FALSE; | ||||||
|  | 
 | ||||||
| 			case WM_CLOSE: | 			case WM_CLOSE: | ||||||
| 				EndDialog(hWnd, 0); | 				EndDialog(dlg, 0); | ||||||
| 				return TRUE; | 				return TRUE; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ namespace wc { | |||||||
| 
 | 
 | ||||||
| 		~Application(); | 		~Application(); | ||||||
| 	private: | 	private: | ||||||
| 		static BOOL CALLBACK dlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); | 		static BOOL CALLBACK dlgProc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam); | ||||||
| 
 | 
 | ||||||
| 		const std::string m_appName; | 		const std::string m_appName; | ||||||
| 		const std::string m_appVersion; | 		const std::string m_appVersion; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user