Fix history combobox show twice item
[TortoiseGit.git] / src / Utils / MiscUI / BaseWindow.h
blob17a6a0346362737ed2fe78664a2e66d891eb876a
1 // TortoiseSVN - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2007 - Stefan Kueng
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.
19 #pragma once
20 #include <string>
23 /**
24 * \ingroup Utils
25 * Loads a string from the application resources.
27 class ResString
29 enum { MAX_RESSTRING = 1024 };
30 public:
31 ResString (HINSTANCE hInst, int resId);
32 operator TCHAR const * () const { return _buf; }
33 private:
34 TCHAR _buf [MAX_RESSTRING + 1];
37 /**
38 * \ingroup Utils
39 * A base window class.
40 * Provides separate window message handlers for every window object based on
41 * this class.
43 class CWindow
45 public:
46 virtual bool RegisterWindow(UINT style, HICON hIcon, HCURSOR hCursor, HBRUSH hbrBackground,
47 LPCTSTR lpszMenuName, LPCTSTR lpszClassName, HICON hIconSm);
48 virtual bool RegisterWindow(CONST WNDCLASSEX* wcx);
50 /// static message handler to put in WNDCLASSEX structure
51 static LRESULT CALLBACK stWinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
53 /**
54 * Sets the window title.
56 void SetWindowTitle(const std::wstring& sTitle)
58 sWindowTitle = sTitle;
61 /**
62 * Sets the transparency of the window.
63 * \remark note that this also sets the WS_EX_LAYERED style!
65 void SetTransparency(BYTE alpha, COLORREF color = 0xFF000000);
67 virtual bool Create();
68 virtual bool Create(DWORD dwStyles, HWND hParent = NULL, RECT* rect = NULL);
69 virtual bool CreateEx(DWORD dwExStyles, DWORD dwStyles, HWND hParent = NULL, RECT* rect = NULL);
71 //void MsgLoop();
72 bool IsWindowClosed() { return bWindowClosed; };
74 operator HWND() {return m_hwnd;}
75 protected:
76 HINSTANCE hResource;
77 HWND m_hwnd;
78 bool bWindowClosed;
79 std::wstring sClassName;
80 std::wstring sWindowTitle;
82 //constructor
83 CWindow(HINSTANCE hInst, CONST WNDCLASSEX* wcx = NULL) : m_hwnd(NULL)
84 , hResource(NULL)
85 , bWindowClosed(FALSE)
87 hResource = hInst;
88 if (wcx != NULL)
89 RegisterWindow(wcx);
92 // the real message handler
93 virtual LRESULT CALLBACK WinMsgHandler(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) = 0;
95 // returns a pointer the window (stored as the WindowLong)
96 inline static CWindow * GetObjectFromWindow(HWND hWnd)
98 return (CWindow *)GetWindowLongPtr(hWnd, GWLP_USERDATA);