2 * Copyright (c) 2001, 2002, 2003 Gary R. Van Sickle.
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.
9 * A copy of the GNU General Public License can be found at
12 * Written by Gary R. Van Sickle <g.r.vansickle@worldnet.att.net>
16 #ifndef SETUP_WINDOW_H
17 #define SETUP_WINDOW_H
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,
27 #include "LogSingleton.h"
33 static ATOM WindowClassAtom
;
34 static HINSTANCE AppInstance
;
36 virtual bool registerWindowClass ();
38 static LRESULT CALLBACK
FirstWindowProcReflector (HWND hwnd
, UINT uMsg
,
42 static LRESULT CALLBACK
WindowProcReflector (HWND hwnd
, UINT uMsg
,
43 WPARAM wParam
, LPARAM lParam
);
45 // Our Windows(tm) window handle.
50 // contains handles to fonts we've created
51 // that are to be deleted in our dtor
52 std::vector
<HFONT
> Fonts
;
54 // if we have activated tool tips this will contain the handle
57 // maps a control ID to a string resource ID
58 std::map
<int, int> TooltipStrings
;
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.
65 // Saved old cursor handle, only while BusyCount is non-zero.
68 // Handle to busy cursor (loaded first time needed, NULL until then).
76 void setParent(Window
*aParent
)
85 bool Create (Window
* Parent
= NULL
,
86 DWORD Style
= WS_OVERLAPPEDWINDOW
| WS_VISIBLE
| WS_CLIPCHILDREN
);
88 static void SetAppInstance (HINSTANCE h
)
90 // This only has to be called once in the entire app, before
91 // any Windows are created.
95 virtual LRESULT
WindowProc (UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
96 virtual bool MessageLoop ();
98 void Show (int State
);
100 HWND
GetHWND () const
102 // Ideally this could be hidden from the user completely.
105 static HINSTANCE
GetInstance ()
110 Window
*GetParent () const
114 HWND
GetDlgItem (int id
) const
116 return::GetDlgItem (GetHWND (), id
);
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);
122 UINT
IsButtonChecked (int nIDButton
) const;
124 void PostMessageNow (UINT uMsg
, WPARAM wParam
= 0, LPARAM lParam
= 0);
126 virtual bool OnMessageApp (UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
128 // Not processed by default. Override in derived classes to
129 // do something with app messages if you need to.
133 virtual bool OnMessageCmd (int id
, HWND hwndctl
, UINT code
)
135 // Not processed by default. Override in derived classes to
136 // do something with command messages if you need to.
140 virtual bool OnNotify (NMHDR
*pNmHdr
, LRESULT
*pResult
)
142 // Not processed by default. Override in derived classes to
143 // do something with command messages if you need to.
147 RECT
GetWindowRect() const;
148 RECT
GetClientRect() const;
150 // Center the window on the parent, or on screen if no parent.
151 void CenterWindow ();
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);
157 // Set the title of the window.
158 void SetWindowText (const std::wstring
& s
);
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.
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);
174 #endif /* SETUP_WINDOW_H */