/[winpt]/trunk/Src/wptTrayPop.cpp
ViewVC logotype

Annotation of /trunk/Src/wptTrayPop.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 23 - (hide annotations)
Fri Sep 30 10:10:16 2005 UTC (19 years, 5 months ago) by twoaday
File size: 6843 byte(s)
Almost finished phase 1 of the WinPT GPGME port.
Still need more cleanup, comments and tests.


1 twoaday 2 /* wptTrayPop.cpp - Alternative status box
2     * Copyright (C) 2002, 2004 Timo Schulz
3     * Copyright (C) 2002 Prasenjeet Dutta. <http://www.chaoszone.org>
4     *
5     * This file is part of WinPT.
6     *
7     * WinPT is free software; you can redistribute it and/or
8     * modify it under the terms of the GNU General Public License
9     * as published by the Free Software Foundation; either version 2
10     * of the License, or (at your option) any later version.
11     *
12     * WinPT is distributed in the hope that it will be useful,
13     * but WITHOUT ANY WARRANTY; without even the implied warranty of
14     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15     * General Public License for more details.
16     *
17     * You should have received a copy of the GNU General Public License
18     * along with WinPT; if not, write to the Free Software Foundation,
19     * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20     *
21     */
22    
23     /*
24     * ChangeLog
25     * Maybe I didn't understand how to use the code, but the original code
26     * always produces a window near the taskbar icon. This is not very useful
27     * because we need it near the dialog. I also removed some code we don't use.
28     * -ts
29     */
30    
31     #include <windows.h>
32    
33 twoaday 23 #include "wptW32API.h"
34    
35 twoaday 2 #define PD_WINDOWNAME "ClsTrayPop"
36     #define PD_TIMER_IDENTIFIER 23
37     #define PD_TIMER_TIMEOUT 1500
38    
39     #define PD_TRAYPOP_WIDTH 200
40     #define PD_TRAYPOP_HEIGHT 80
41    
42     extern HINSTANCE glob_hinst;
43     extern HWND glob_hwnd;
44    
45    
46     static LPCTSTR
47     store_text( LPCTSTR alert_text )
48     {
49     static LPCTSTR text;
50    
51     if( alert_text )
52     text = alert_text;
53     return text;
54     } /* store_text */
55    
56    
57     static void
58     paint_alert (HDC *p_hdc, PAINTSTRUCT *p_ps)
59     {
60     SetBkMode(*p_hdc, TRANSPARENT);
61     HFONT hFont = CreateFont(
62     13, // height of font (in css px-style)
63     0, // average character width
64     0, // angle of escapement
65     0, // base-line orientation angle
66     FW_DONTCARE, // font weight
67     FALSE, // italic attribute option
68     FALSE, // underline attribute option
69     FALSE, // strikeout attribute option
70     // TODO: future i18n problem, see docs
71     DEFAULT_CHARSET, // character set identifier
72     OUT_DEFAULT_PRECIS, // output precision
73     CLIP_DEFAULT_PRECIS, // clipping precision
74     DEFAULT_QUALITY, // output quality
75     FF_DONTCARE, // pitch and family
76     "Tahoma" // typeface name
77     );
78    
79     HFONT hOldFont = (HFONT) SelectObject(*p_hdc, hFont);
80     RECT recttext;
81     recttext.top = 0;
82     recttext.bottom = PD_TRAYPOP_HEIGHT - 2;
83     recttext.left = 10;
84     recttext.right = PD_TRAYPOP_WIDTH - 12;
85    
86     MoveToEx(*p_hdc, 0, 0, (LPPOINT) NULL);
87     LineTo(*p_hdc, PD_TRAYPOP_WIDTH - 3, 0);
88     LineTo(*p_hdc, PD_TRAYPOP_WIDTH - 3, PD_TRAYPOP_HEIGHT - 3);
89     LineTo(*p_hdc, 0, PD_TRAYPOP_HEIGHT - 3);
90     LineTo(*p_hdc, 0, 0);
91    
92     UINT dtFormat = DT_END_ELLIPSIS | DT_NOPREFIX | DT_WORDBREAK;
93    
94     // determine text height
95     int text_height = DrawText(
96     *p_hdc, // handle to DC
97     store_text(NULL), // text to draw
98     -1, // text length // TODO: future i18n problem, see docs
99     &recttext, // formatting dimensions
100     dtFormat | DT_CENTER | DT_CALCRECT
101     );
102    
103     // vertically center text in the box
104     recttext.top = PD_TRAYPOP_HEIGHT/2 - text_height/2 - 5;
105     recttext.bottom = PD_TRAYPOP_HEIGHT/2 + text_height/2 + 5;
106     recttext.left = 10;
107     recttext.right = PD_TRAYPOP_WIDTH - 12;
108    
109     // change over to left-justified from centered, for longer lines
110     (text_height > 30)? (dtFormat |= DT_LEFT) : (dtFormat |= DT_CENTER);
111    
112     DrawText (*p_hdc,
113     store_text (NULL),
114     -1, // text length // TODO: future i18n problem, see docs
115     &recttext, // formatting dimensions
116     dtFormat);
117    
118     hFont = (HFONT) SelectObject(*p_hdc, hOldFont);
119     DeleteObject(hFont);
120     } /* paint_alert */
121    
122    
123     static LRESULT CALLBACK
124     WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
125     {
126     PAINTSTRUCT ps;
127     HDC hdc;
128    
129     switch (msg)
130     {
131     case WM_PAINT:
132     hdc = BeginPaint (hWnd, &ps);
133     paint_alert (&hdc, &ps);
134     EndPaint (hWnd, &ps);
135     break;
136    
137     case WM_LBUTTONUP:
138     KillTimer (hWnd, PD_TIMER_IDENTIFIER);
139     PostQuitMessage (1);
140     break;
141    
142     case WM_DESTROY:
143     KillTimer (hWnd, PD_TIMER_IDENTIFIER);
144     PostQuitMessage (1);
145     break;
146    
147     default:
148     return DefWindowProc (hWnd, msg, wParam, lParam);
149     }
150    
151     return 0;
152     } /* WndProc */
153    
154    
155     static VOID CALLBACK
156     popup_timer_proc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
157     {
158     DestroyWindow(hwnd);
159     } /* popup_timer_proc */
160    
161    
162     static void
163     init_wclass (WNDCLASS *p_wclass, HINSTANCE hInst)
164     {
165     p_wclass->style = CS_HREDRAW | CS_VREDRAW;
166     p_wclass->lpfnWndProc = WndProc;
167     p_wclass->cbClsExtra = 0;
168     p_wclass->cbWndExtra = 0;
169     p_wclass->hInstance = hInst;
170     p_wclass->hIcon = LoadIcon(hInst, IDI_APPLICATION);
171     p_wclass->hCursor = LoadCursor(NULL, IDC_ARROW);
172     p_wclass->hbrBackground = (HBRUSH) (COLOR_INFOBK + 1);
173     p_wclass->lpszMenuName = NULL;
174     p_wclass->lpszClassName = PD_WINDOWNAME;
175     } /* init_wclass */
176    
177    
178 twoaday 23 /* Show the given message in a pop-up window for millis miliseconds. */
179 twoaday 2 int
180     show_msg (HWND hParentWnd, int millis, LPCTSTR string)
181     {
182     RECT parent;
183     int nWndWidth = PD_TRAYPOP_WIDTH;
184     int nWndHeight = PD_TRAYPOP_HEIGHT;
185     MSG msg;
186     HWND hWnd;
187     UINT_PTR timer;
188     WNDCLASS wClass;
189    
190     store_text (string);
191     GetWindowRect (hParentWnd, &parent);
192    
193     init_wclass (&wClass, glob_hinst);
194     RegisterClass (&wClass);
195    
196     hWnd = CreateWindowEx(
197     WS_EX_TOOLWINDOW | WS_EX_TOPMOST, // extended style
198     PD_WINDOWNAME, // class name
199     PD_WINDOWNAME, // window name
200     WS_POPUP, // window style
201     (parent.right + parent.left) / 2, (parent.bottom + parent.top) / 2,
202     nWndWidth - 2, nWndHeight - 2, // width and height, with corrections
203     NULL, // parent handle
204     NULL, // menu handle
205     glob_hinst, // instance handle
206     NULL // other parameters
207     );
208    
209     if (hWnd == NULL)
210     return 0;
211     else {
212 twoaday 23 ShowWindow (hWnd, SW_SHOW);
213     UpdateWindow (hWnd);
214 twoaday 2 // ensure parent never loses focus
215 twoaday 23 EnableWindow (hParentWnd, TRUE);
216     center_window (hWnd, hParentWnd);
217     SetActiveWindow (NULL);
218 twoaday 2 }
219    
220 twoaday 23 timer = SetTimer (hWnd, // handle to window
221     PD_TIMER_IDENTIFIER, // timer identifier
222     millis, // time-out value
223     (TIMERPROC) popup_timer_proc // timer procedure
224     );
225 twoaday 2
226 twoaday 23 while (GetMessage (&msg, NULL, 0, 0)) {
227     TranslateMessage (&msg);
228     DispatchMessage (&msg);
229 twoaday 2 }
230    
231     return msg.wParam;
232 twoaday 23 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26