Update rebase documentation
[TortoiseGit.git] / src / Utils / MiscUI / BaseWindow.h
blob295e24ffd88f7a4154146d92f23c13706c9fe71f
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2007, 2010, 2013-2014 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #pragma once
21 #include "ResString.h"
23 #include <string>
26 /**
27 * \ingroup Utils
28 * A base window class.
29 * Provides separate window message handlers for every window object based on
30 * this class.
32 class CWindow
34 public:
35 virtual bool RegisterWindow(UINT style, HICON hIcon, HCURSOR hCursor,
36 HBRUSH hbrBackground, LPCTSTR lpszMenuName,
37 LPCTSTR lpszClassName, HICON hIconSm);
38 virtual bool RegisterWindow(CONST WNDCLASSEX* wcx);
40 /// static message handler to put in WNDCLASSEX structure
41 static LRESULT CALLBACK stWinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
43 /**
44 * Sets the window title.
46 void SetWindowTitle(const std::wstring& sTitle)
48 sWindowTitle = sTitle;
51 void SetRegistryPath(const std::wstring& sPath)
53 size_t slashPos = sPath.find_last_of('\\');
54 sRegistryPath = sPath.substr(0, slashPos);
55 sRegistryValue = sPath.substr(slashPos+1);
58 /**
59 * Sets the transparency of the window.
60 * \remark note that this also sets the WS_EX_LAYERED style!
62 void SetTransparency(BYTE alpha, COLORREF color = 0xFF000000);
64 virtual bool Create();
65 virtual bool Create(DWORD dwStyles, HWND hParent = NULL, RECT* rect = NULL);
66 virtual bool CreateEx(DWORD dwExStyles, DWORD dwStyles, HWND hParent = NULL, RECT* rect = NULL, LPCTSTR classname = NULL);
68 //void MsgLoop();
69 bool IsWindowClosed() const { return bWindowClosed; };
71 operator HWND() const {return m_hwnd;}
72 protected:
73 HINSTANCE hResource;
74 HWND m_hwnd;
75 HWND m_hParent;
76 bool bWindowClosed;
77 std::wstring sClassName;
78 std::wstring sWindowTitle;
79 std::wstring sRegistryPath;
80 std::wstring sRegistryValue;
81 bool bWindowRestored;
83 //constructor
84 CWindow(HINSTANCE hInst, CONST WNDCLASSEX* wcx = NULL)
85 : m_hwnd(NULL)
86 , hResource(NULL)
87 , m_hParent(NULL)
88 , bWindowClosed(FALSE)
89 , bWindowRestored(false)
91 hResource = hInst;
92 if (wcx != NULL)
93 RegisterWindow(wcx);
96 // the real message handler
97 virtual LRESULT CALLBACK WinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) = 0;
99 // returns a pointer the window (stored as the WindowLong)
100 inline static CWindow * GetObjectFromWindow(HWND hWnd)
102 return (CWindow *)GetWindowLongPtr(hWnd, GWLP_USERDATA);