]> cygwin.com Git - cygwin-apps/setup.git/blob - window.h
dcc81c1b5c6e92a2fc7f60ab7808784be65f05a6
[cygwin-apps/setup.git] / window.h
1 /*
2 * Copyright (c) 2001, 2002, 2003 Gary R. Van Sickle.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * A copy of the GNU General Public License can be found at
10 * http://www.gnu.org/
11 *
12 * Written by Gary R. Van Sickle <g.r.vansickle@worldnet.att.net>
13 *
14 */
15
16 #ifndef SETUP_WINDOW_H
17 #define SETUP_WINDOW_H
18
19 // This is the header for the Window class. It serves both as a window class
20 // in its own right and as a base class for other window-like classes (e.g. PropertyPage,
21 // PropSheet).
22
23 #include <vector>
24 #include <map>
25 #include "win32.h"
26 #include <commctrl.h>
27 #include "LogSingleton.h"
28
29 class RECTWrapper;
30
31 class Window
32 {
33 static ATOM WindowClassAtom;
34 static HINSTANCE AppInstance;
35
36 virtual bool registerWindowClass ();
37 protected:
38 static LRESULT CALLBACK FirstWindowProcReflector (HWND hwnd, UINT uMsg,
39 WPARAM wParam,
40 LPARAM lParam);
41 private:
42 static LRESULT CALLBACK WindowProcReflector (HWND hwnd, UINT uMsg,
43 WPARAM wParam, LPARAM lParam);
44
45 // Our Windows(tm) window handle.
46 HWND WindowHandle;
47
48 Window *Parent;
49
50 // contains handles to fonts we've created
51 // that are to be deleted in our dtor
52 std::vector<HFONT> Fonts;
53
54 // if we have activated tool tips this will contain the handle
55 HWND TooltipHandle;
56
57 // maps a control ID to a string resource ID
58 std::map<int, int> TooltipStrings;
59
60 // Recursive count of number of times we've called SetBusy,
61 // so that we only reset the cursor when we've cleared it
62 // the same number of times.
63 int BusyCount;
64
65 // Saved old cursor handle, only while BusyCount is non-zero.
66 HCURSOR OldCursor;
67
68 // Handle to busy cursor (loaded first time needed, NULL until then).
69 HCURSOR BusyCursor;
70
71 protected:
72 void SetHWND (HWND h)
73 {
74 WindowHandle = h;
75 };
76 void setParent(Window *aParent)
77 {
78 Parent = aParent;
79 };
80
81 public:
82 Window ();
83 virtual ~ Window ();
84
85 bool Create (Window * Parent = NULL,
86 DWORD Style = WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN);
87
88 static void SetAppInstance (HINSTANCE h)
89 {
90 // This only has to be called once in the entire app, before
91 // any Windows are created.
92 AppInstance = h;
93 };
94
95 virtual LRESULT WindowProc (UINT uMsg, WPARAM wParam, LPARAM lParam);
96 virtual bool MessageLoop ();
97
98 void Show (int State);
99
100 HWND GetHWND () const
101 {
102 // Ideally this could be hidden from the user completely.
103 return WindowHandle;
104 };
105 static HINSTANCE GetInstance ()
106 {
107 return AppInstance;
108 };
109
110 Window *GetParent () const
111 {
112 return Parent;
113 };
114 HWND GetDlgItem (int id) const
115 {
116 return::GetDlgItem (GetHWND (), id);
117 };
118 bool SetDlgItemFont (int id, const TCHAR * fontname, int Pointsize,
119 int Weight = FW_NORMAL, bool Italic =
120 false, bool Underline = false, bool Strikeout = false);
121
122 UINT IsButtonChecked (int nIDButton) const;
123
124 void PostMessageNow (UINT uMsg, WPARAM wParam = 0, LPARAM lParam = 0);
125
126 virtual bool OnMessageApp (UINT uMsg, WPARAM wParam, LPARAM lParam)
127 {
128 // Not processed by default. Override in derived classes to
129 // do something with app messages if you need to.
130 return false;
131 };
132
133 virtual bool OnMessageCmd (int id, HWND hwndctl, UINT code)
134 {
135 // Not processed by default. Override in derived classes to
136 // do something with command messages if you need to.
137 return false;
138 };
139
140 virtual bool OnNotify (NMHDR *pNmHdr, LRESULT *pResult)
141 {
142 // Not processed by default. Override in derived classes to
143 // do something with command messages if you need to.
144 return false;
145 };
146
147 RECT GetWindowRect() const;
148 RECT GetClientRect() const;
149
150 // Center the window on the parent, or on screen if no parent.
151 void CenterWindow ();
152
153 // Reposition the window
154 bool MoveWindow(long x, long y, long w, long h, bool Repaint = true);
155 bool MoveWindow(const RECTWrapper &r, bool Repaint = true);
156
157 // Set the title of the window.
158 void SetWindowText (const std::wstring& s);
159
160 RECT ScreenToClient(const RECT &r) const;
161 void ActivateTooltips ();
162 void SetTooltipState (bool b);
163 void AddTooltip (HWND target, HWND win, const char *text);
164 void AddTooltip (int id, const char *text);
165 void AddTooltip (int id, int string_resource);
166 BOOL TooltipNotificationHandler (LPARAM lParam);
167 // Call this to set an hourglass cursor.
168 void SetBusy (void);
169 // Call this to reset to normal cursor. It must be called
170 // once for each call to SetBusy; they nest recursively.
171 void ClearBusy (void);
172 };
173
174 #endif /* SETUP_WINDOW_H */
This page took 0.053458 seconds and 6 git commands to generate.