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.
21 #include "ResString.h"
28 * A base window class.
29 * Provides separate window message handlers for every window object based on
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
);
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);
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
);
69 bool IsWindowClosed() const { return bWindowClosed
; };
71 operator HWND() const {return m_hwnd
;}
77 std::wstring sClassName
;
78 std::wstring sWindowTitle
;
79 std::wstring sRegistryPath
;
80 std::wstring sRegistryValue
;
84 CWindow(HINSTANCE hInst
, CONST WNDCLASSEX
* wcx
= NULL
)
88 , bWindowClosed(FALSE
)
89 , bWindowRestored(false)
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
);