]> cygwin.com Git - cygwin-apps/setup.git/blame - window.h
* Makefile.am: Treat libgetopt++ as full-fledged SUBDIRS.
[cygwin-apps/setup.git] / window.h
CommitLineData
df62e023 1/*
0a539fe4 2 * Copyright (c) 2001, 2002, 2003 Gary R. Van Sickle.
df62e023
RC
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
c93bc6d0
MB
16#ifndef SETUP_WINDOW_H
17#define SETUP_WINDOW_H
18
df62e023
RC
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
daab12c7 23#include <vector>
37f49caf 24#include <map>
46d04e97 25#include "win32.h"
37f49caf
BD
26#include <commctrl.h>
27#include "LogSingleton.h"
df62e023 28
0a539fe4 29class RECTWrapper;
58db1046 30
df62e023
RC
31class Window
32{
33 static ATOM WindowClassAtom;
34 static HINSTANCE AppInstance;
35
693916f8
RC
36 virtual bool registerWindowClass ();
37protected:
df62e023
RC
38 static LRESULT CALLBACK FirstWindowProcReflector (HWND hwnd, UINT uMsg,
39 WPARAM wParam,
40 LPARAM lParam);
693916f8 41private:
df62e023
RC
42 static LRESULT CALLBACK WindowProcReflector (HWND hwnd, UINT uMsg,
43 WPARAM wParam, LPARAM lParam);
44
0a539fe4 45 // Our Windows(tm) window handle.
df62e023
RC
46 HWND WindowHandle;
47
48 Window *Parent;
49
daab12c7
BD
50 // contains handles to fonts we've created
51 // that are to be deleted in our dtor
52 std::vector<HFONT> Fonts;
b7301c43 53
37f49caf
BD
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;
67ce5bee
DK
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
df62e023
RC
71protected:
72 void SetHWND (HWND h)
73 {
74 WindowHandle = h;
75 };
daab12c7
BD
76 void setParent(Window *aParent)
77 {
78 Parent = aParent;
79 };
df62e023
RC
80
81public:
82 Window ();
83 virtual ~ Window ();
84
0a539fe4
MB
85 virtual bool Create (Window * Parent = NULL,
86 DWORD Style =
87 WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN);
88
df62e023
RC
89 static void SetAppInstance (HINSTANCE h)
90 {
0a539fe4
MB
91 // This only has to be called once in the entire app, before
92 // any Windows are created.
df62e023
RC
93 AppInstance = h;
94 };
95
96 virtual LRESULT WindowProc (UINT uMsg, WPARAM wParam, LPARAM lParam);
97 virtual bool MessageLoop ();
98
df62e023
RC
99 void Show (int State);
100
101 HWND GetHWND () const
102 {
0a539fe4 103 // Ideally this could be hidden from the user completely.
df62e023
RC
104 return WindowHandle;
105 };
67ce5bee 106 static HINSTANCE GetInstance ()
df62e023
RC
107 {
108 return AppInstance;
109 };
110
111 Window *GetParent () const
112 {
113 return Parent;
114 };
115 HWND GetDlgItem (int id) const
116 {
117 return::GetDlgItem (GetHWND (), id);
118 };
58db1046
RC
119 bool SetDlgItemFont (int id, const TCHAR * fontname, int Pointsize,
120 int Weight = FW_NORMAL, bool Italic =
121 false, bool Underline = false, bool Strikeout = false);
b7301c43
RC
122
123 UINT IsButtonChecked (int nIDButton) const;
df62e023
RC
124
125 void PostMessage (UINT uMsg, WPARAM wParam = 0, LPARAM lParam = 0);
126
127 virtual bool OnMessageApp (UINT uMsg, WPARAM wParam, LPARAM lParam)
128 {
0a539fe4
MB
129 // Not processed by default. Override in derived classes to
130 // do something with app messages if you need to.
df62e023
RC
131 return false;
132 };
133
b7301c43
RC
134 virtual bool OnMessageCmd (int id, HWND hwndctl, UINT code)
135 {
0a539fe4
MB
136 // Not processed by default. Override in derived classes to
137 // do something with command messages if you need to.
b7301c43
RC
138 return false;
139 };
140
63c82708
RC
141 RECT GetWindowRect() const;
142 RECT GetClientRect() const;
143
df62e023
RC
144 // Center the window on the parent, or on screen if no parent.
145 void CenterWindow ();
146
63c82708
RC
147 // Reposition the window
148 bool MoveWindow(long x, long y, long w, long h, bool Repaint = true);
0a539fe4 149 bool MoveWindow(const RECTWrapper &r, bool Repaint = true);
63c82708 150
58db1046 151 // Set the title of the window.
08678720 152 void SetWindowText (const std::string& s);
58db1046 153
63c82708 154 RECT ScreenToClient(const RECT &r) const;
37f49caf
BD
155 void ActivateTooltips ();
156 void SetTooltipState (bool b);
157 void AddTooltip (HWND target, HWND win, const char *text);
158 void AddTooltip (int id, const char *text);
159 void AddTooltip (int id, int string_resource);
160 BOOL TooltipNotificationHandler (LPARAM lParam);
67ce5bee
DK
161 // Call this to set an hourglass cursor.
162 void SetBusy (void);
163 // Call this to reset to normal cursor. It must be called
164 // once for each call to SetBusy; they nest recursively.
165 void ClearBusy (void);
df62e023
RC
166};
167
c93bc6d0 168#endif /* SETUP_WINDOW_H */
This page took 0.067438 seconds and 5 git commands to generate.