From 1d3e58587dea7dd4b1164d89f2fc15137aa6cd0c Mon Sep 17 00:00:00 2001 From: Grayson Riffe Date: Thu, 4 Jun 2026 18:08:26 -0500 Subject: [PATCH] Add base dialog --- .gitignore | 1 + WatchfulEye/CMakeLists.txt | 2 +- WatchfulEye/resource.rc | 105 ++++++++++++++++++++++++++++++++ WatchfulEye/src/Application.cpp | 66 ++++++++++++++++++++ WatchfulEye/src/Application.h | 17 ++++++ WatchfulEye/src/main.cpp | 14 ++++- WatchfulEye/src/resource.h | 18 ++++++ 7 files changed, 220 insertions(+), 3 deletions(-) create mode 100644 WatchfulEye/resource.rc create mode 100644 WatchfulEye/src/Application.cpp create mode 100644 WatchfulEye/src/Application.h create mode 100644 WatchfulEye/src/resource.h diff --git a/.gitignore b/.gitignore index 9a44da1..cbe0d26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .vs/ build/ +*.aps diff --git a/WatchfulEye/CMakeLists.txt b/WatchfulEye/CMakeLists.txt index d96225c..b4caf59 100644 --- a/WatchfulEye/CMakeLists.txt +++ b/WatchfulEye/CMakeLists.txt @@ -1,5 +1,5 @@ # Watchful Eye app CMakeLists.txt -add_executable(WatchfulEye WIN32 "src/main.cpp" "src/pch.h") +add_executable(WatchfulEye WIN32 "src/main.cpp" "src/pch.h" "src/Application.h" "src/Application.cpp" "resource.rc" "src/resource.h") set_property(TARGET WatchfulEye PROPERTY CXX_STANDARD 20) diff --git a/WatchfulEye/resource.rc b/WatchfulEye/resource.rc new file mode 100644 index 0000000..0b44ecd --- /dev/null +++ b/WatchfulEye/resource.rc @@ -0,0 +1,105 @@ +// Microsoft Visual C++ generated resource script. +// +#include "src/resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "src/resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include \0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_DIALOGMAIN DIALOGEX 0, 0, 300, 114 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION +EXSTYLE WS_EX_TOPMOST +CAPTION "Dialog" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + CTEXT "Time left on tester:",IDC_STATICTIME,17,27,266,60,SS_CENTERIMAGE + CTEXT "Time left on tester:",IDC_STATICUPPER,54,4,190,22,SS_CENTERIMAGE +END + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO +BEGIN + IDD_DIALOGMAIN, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 293 + TOPMARGIN, 7 + BOTTOMMARGIN, 107 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// AFX_DIALOG_LAYOUT +// + +IDD_DIALOGMAIN AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/WatchfulEye/src/Application.cpp b/WatchfulEye/src/Application.cpp new file mode 100644 index 0000000..2b99c8a --- /dev/null +++ b/WatchfulEye/src/Application.cpp @@ -0,0 +1,66 @@ +// Application class implementation +#include "pch.h" + +#include "Application.h" + +#include "resource.h" + +namespace watchfuleye { + Application::Application(const char* appName, const char* appVersion) + : m_appName(appName) + , m_appVersion(appVersion) + , m_mainDlg(nullptr) + { + std::cout << std::format("{} {}\n", m_appName, m_appVersion); + } + + void Application::run() { + SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); + + m_mainDlg = CreateDialogParam(nullptr, MAKEINTRESOURCE(IDD_DIALOGMAIN), nullptr, reinterpret_cast(mainDlgProc), reinterpret_cast(this)); + + ShowWindow(m_mainDlg, SW_SHOW); + + MSG msg = {}; + while (GetMessage(&msg, nullptr, 0, 0)) + IsDialogMessage(m_mainDlg, &msg); + } + + BOOL CALLBACK Application::mainDlgProc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam) { + static Application* app = nullptr; + + switch (msg) { + case WM_INITDIALOG: { + app = reinterpret_cast(lParam); + + SetWindowText(dlg, app->m_appName.c_str()); + // Set window icons + + // Spawn in the lower right corner of the virtual screen (might be problematic in some cases) + int cornerX = GetSystemMetrics(SM_XVIRTUALSCREEN) + GetSystemMetrics(SM_CXVIRTUALSCREEN); + int cornerY = GetSystemMetrics(SM_YVIRTUALSCREEN) + GetSystemMetrics(SM_CYVIRTUALSCREEN); + + SetWindowPos(dlg, nullptr, cornerX - 550, cornerY - 340, NULL, NULL, SWP_NOZORDER | SWP_NOSIZE); + + return TRUE; + } + + case WM_CLOSE: { + // Do nothing + return TRUE; + } + + case WM_DESTROY: { + PostQuitMessage(0); + return TRUE; + } + } + + return FALSE; + } + + + Application::~Application() { + + } +} diff --git a/WatchfulEye/src/Application.h b/WatchfulEye/src/Application.h new file mode 100644 index 0000000..a0e94aa --- /dev/null +++ b/WatchfulEye/src/Application.h @@ -0,0 +1,17 @@ +// Application class header + +namespace watchfuleye { + class Application { + public: + Application(const char* appName, const char* appVersion); + + void run(); + + ~Application(); + private: + static BOOL CALLBACK mainDlgProc(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam); + + std::string m_appName, m_appVersion; + HWND m_mainDlg; + }; +} diff --git a/WatchfulEye/src/main.cpp b/WatchfulEye/src/main.cpp index 7a88e9c..83c44bb 100644 --- a/WatchfulEye/src/main.cpp +++ b/WatchfulEye/src/main.cpp @@ -2,10 +2,20 @@ #include "pch.h" #include "version.h" +#include "Application.h" + +// Enable visual styles +#pragma comment(linker, "\"/manifestdependency:type='win32' \ +name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ +processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") + +#define APPNAME "Watchful Eye" int main(int argc, char* argv[]) { - std::cout << "Watchful Eye " APPVERSION "\n"; + { + watchfuleye::Application app(APPNAME, APPVERSION); + app.run(); + } - std::cin.get(); return EXIT_SUCCESS; } diff --git a/WatchfulEye/src/resource.h b/WatchfulEye/src/resource.h new file mode 100644 index 0000000..aef7753 --- /dev/null +++ b/WatchfulEye/src/resource.h @@ -0,0 +1,18 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by C:\Users\Grayson\Documents\Visual Studio 18\Solutions\watchful-eye\WatchfulEye\resource.rc +// +#define IDD_DIALOGMAIN 101 +#define IDC_STATICTIME 1000 +#define IDC_STATICUPPER 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_SYMED_VALUE 101 +#endif +#endif