From bc4cef92d8efbf97a9215122abc2d7247c287f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Fri, 2 Sep 2022 20:16:04 +0200 Subject: Improve Window object. --- c/window.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 c/window.h (limited to 'c/window.h') diff --git a/c/window.h b/c/window.h new file mode 100644 index 0000000..5cdffe4 --- /dev/null +++ b/c/window.h @@ -0,0 +1,50 @@ +#ifndef WINDOW_H +#define WINDOW_H + +#include + +#include "data.h" +#include "datalistview.h" +#include "drag.h" +#include "episodelistview.h" +#include "resource.h" +#include "win32.h" + +struct Window +{ + HWND hWnd; + HWND hWndFocus = nullptr; + HWND hWndStatus = nullptr; + HMENU hMenuPopup = Require(GetSubMenu(Require(LoadMenuW(nullptr, MAKEINTRESOURCE(IDR_POPUPMENU))), 0)); + + /* File views. */ + FileView fvCfg = FileView::Initialized(L"cfg.dat", 1); + CfgA& cfg = fvCfg.At(0); + FileView fvElv{L"elvdata.dat", cfg.cEp+128u}; + FileView fvDlv{L"dlvdata.dat", cfg.cEp+128u}; + + /* Layout handlers. */ + DlvDragger dragDlv = DlvDragger(*this); + + /* Child window objects. */ + DataListView dlv = DataListView(*this); + EpisodeListView elv = EpisodeListView(*this); + + inline Window(HWND hWnd) : hWnd(hWnd) {} + LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); + + /* Given main window's width and height, set appropriate + * positions and sizes for child windows. */ + void UpdateLayout(int w = 0, int h = 0); + + /* Process main menu commands. */ + void HandleMainMenu(HWND, WORD); + + /* Display text in status bar. */ + void Status(const wchar_t* msg, unsigned short i = 0); + + /* Try to style application according to current Windows theme. */ + void UpdateTheme(); +}; + +#endif -- cgit v1.2.3