source: trunk/Utilities/ShowHresult/NotifyIconWindow.h @ 92

Last change on this file since 92 was 92, checked in by roman, 10 years ago
  • Property svn:keywords set to Id
File size: 27.2 KB
Line 
1////////////////////////////////////////////////////////////
2// Copyright (C) Roman Ryltsov, 2008-2011
3// Created by Roman Ryltsov roman@alax.info
4//
5// $Id: NotifyIconWindow.h 92 2012-08-16 17:01:42Z roman $
6
7#pragma once
8
9#include <vfwmsgs.h>
10#include <asferr.h> // FACILITY_NS
11#include <mferror.h> // FACILITY_MF
12#include "rowinhttp.h"
13#include "AboutDialog.h"
14
15////////////////////////////////////////////////////////////
16// CNotifyIconWindow
17
18class CNotifyIconWindow : 
19        public CMessageOnlyWindowImpl<CNotifyIconWindow>
20{
21public:
22
23DECLARE_WND_CLASS(_T("CNotifyIconWindow"))
24
25BEGIN_MSG_MAP_EX(CNotifyIconWindow)
26        _Z4(atlTraceUI, 4, _T("uMsg 0x%04X, wParam 0x%08X, lParam 0x%08X\n"), uMsg, wParam, lParam);
27        //CHAIN_MSG_MAP(CMessageOnlyWindowImpl<CNotifyIconWindow>)
28        MSG_WM_CREATE(OnCreate)
29        MSG_WM_DESTROY(OnDestroy)
30        MSG_WM_CHANGECBCHAIN(OnChangeCbChain)
31        MSG_WM_DRAWCLIPBOARD(OnDrawClipboard)
32        MSG_WM_MOUSEMOVE(OnMouseMove)
33        MSG_WM_LBUTTONDBLCLK(OnLButtonDblClk)
34        MSG_WM_RBUTTONUP(OnRButtonUp)
35        MESSAGE_HANDLER_EX(NIN_BALLOONUSERCLICK, OnNotifyIconBalloonUserClick)
36        MESSAGE_HANDLER_EX(WM_NOTIFYICON, OnNotifyIcon)
37        COMMAND_ID_HANDLER_EX(ID_APP_ABOUT, OnApplicationAbout)
38        COMMAND_ID_HANDLER_EX(ID_APP_EXIT, OnApplicationExit)
39        REFLECT_NOTIFICATIONS()
40END_MSG_MAP()
41
42public:
43
44        //////////////////////////////////////////////////////////
45        // Window Message Identifiers
46
47        enum
48        {
49                WM_FIRST = WM_APP,
50                WM_NOTIFYICON,
51        };
52
53private:
54        ULONGLONG m_nCommonControlsVersion;
55        ULONGLONG m_nShellVersion;
56        NOTIFYICONDATA m_NotifyIconData;
57        CWindow m_NextClipboardViewerWindow;
58        CString m_sQuery;
59
60        static BOOL IsQuartzResult(HRESULT nResult, CString* psMessage = NULL)
61        {
62                if(HRESULT_FACILITY(nResult) != FACILITY_ITF)
63                        return FALSE;
64                const SCODE nCode = HRESULT_CODE(nResult);
65                if(nCode < 0x0200)// && nCode <= 0xFFFF)
66                        return FALSE;
67                const CString sMessage = AtlFormatSystemMessage(CDataLibraryMap::LoadLibrary(_T("quartz.dll")), nResult);
68                if(sMessage.IsEmpty())
69                        return FALSE;
70                if(psMessage)
71                        *psMessage = sMessage;
72                return TRUE;
73        }
74        static CString LookupQuartzIdentifier(HRESULT nValue)
75        {
76                static const struct { HRESULT nValue; LPCSTR pszName; } g_pMap[] = 
77                {
78                        #define A(x) { x, #x },
79                        A(VFW_E_INVALIDMEDIATYPE)
80                        A(VFW_E_INVALIDSUBTYPE)
81                        A(VFW_E_NEED_OWNER)
82                        A(VFW_E_ENUM_OUT_OF_SYNC)
83                        A(VFW_E_ALREADY_CONNECTED)
84                        A(VFW_E_FILTER_ACTIVE)
85                        A(VFW_E_NO_TYPES)
86                        A(VFW_E_NO_ACCEPTABLE_TYPES)
87                        A(VFW_E_INVALID_DIRECTION)
88                        A(VFW_E_NOT_CONNECTED)
89                        A(VFW_E_NO_ALLOCATOR)
90                        A(VFW_E_RUNTIME_ERROR)
91                        A(VFW_E_BUFFER_NOTSET)
92                        A(VFW_E_BUFFER_OVERFLOW)
93                        A(VFW_E_BADALIGN)
94                        A(VFW_E_ALREADY_COMMITTED)
95                        A(VFW_E_BUFFERS_OUTSTANDING)
96                        A(VFW_E_NOT_COMMITTED)
97                        A(VFW_E_SIZENOTSET)
98                        A(VFW_E_NO_CLOCK)
99                        A(VFW_E_NO_SINK)
100                        A(VFW_E_NO_INTERFACE)
101                        A(VFW_E_NOT_FOUND)
102                        A(VFW_E_CANNOT_CONNECT)
103                        A(VFW_E_CANNOT_RENDER)
104                        A(VFW_E_CHANGING_FORMAT)
105                        A(VFW_E_NO_COLOR_KEY_SET)
106                        A(VFW_E_NOT_OVERLAY_CONNECTION)
107                        A(VFW_E_NOT_SAMPLE_CONNECTION)
108                        A(VFW_E_PALETTE_SET)
109                        A(VFW_E_COLOR_KEY_SET)
110                        A(VFW_E_NO_COLOR_KEY_FOUND)
111                        A(VFW_E_NO_PALETTE_AVAILABLE)
112                        A(VFW_E_NO_DISPLAY_PALETTE)
113                        A(VFW_E_TOO_MANY_COLORS)
114                        A(VFW_E_STATE_CHANGED)
115                        A(VFW_E_NOT_STOPPED)
116                        A(VFW_E_NOT_PAUSED)
117                        A(VFW_E_NOT_RUNNING)
118                        A(VFW_E_WRONG_STATE)
119                        A(VFW_E_START_TIME_AFTER_END)
120                        A(VFW_E_INVALID_RECT)
121                        A(VFW_E_TYPE_NOT_ACCEPTED)
122                        A(VFW_E_SAMPLE_REJECTED)
123                        A(VFW_E_SAMPLE_REJECTED_EOS)
124                        A(VFW_E_DUPLICATE_NAME)
125                        A(VFW_S_DUPLICATE_NAME)
126                        A(VFW_E_TIMEOUT)
127                        A(VFW_E_INVALID_FILE_FORMAT)
128                        A(VFW_E_ENUM_OUT_OF_RANGE)
129                        A(VFW_E_CIRCULAR_GRAPH)
130                        A(VFW_E_NOT_ALLOWED_TO_SAVE)
131                        A(VFW_E_TIME_ALREADY_PASSED)
132                        A(VFW_E_ALREADY_CANCELLED)
133                        A(VFW_E_CORRUPT_GRAPH_FILE)
134                        A(VFW_E_ADVISE_ALREADY_SET)
135                        A(VFW_S_STATE_INTERMEDIATE)
136                        A(VFW_E_NO_MODEX_AVAILABLE)
137                        A(VFW_E_NO_ADVISE_SET)
138                        A(VFW_E_NO_FULLSCREEN)
139                        A(VFW_E_IN_FULLSCREEN_MODE)
140                        A(VFW_E_UNKNOWN_FILE_TYPE)
141                        A(VFW_E_CANNOT_LOAD_SOURCE_FILTER)
142                        A(VFW_S_PARTIAL_RENDER)
143                        A(VFW_E_FILE_TOO_SHORT)
144                        A(VFW_E_INVALID_FILE_VERSION)
145                        A(VFW_S_SOME_DATA_IGNORED)
146                        A(VFW_S_CONNECTIONS_DEFERRED)
147                        A(VFW_E_INVALID_CLSID)
148                        A(VFW_E_INVALID_MEDIA_TYPE)
149                        A(VFW_E_BAD_KEY)
150                        A(VFW_S_NO_MORE_ITEMS)
151                        A(VFW_E_SAMPLE_TIME_NOT_SET)
152                        A(VFW_S_RESOURCE_NOT_NEEDED)
153                        A(VFW_E_MEDIA_TIME_NOT_SET)
154                        A(VFW_E_NO_TIME_FORMAT_SET)
155                        A(VFW_E_MONO_AUDIO_HW)
156                        A(VFW_S_MEDIA_TYPE_IGNORED)
157                        A(VFW_E_NO_DECOMPRESSOR)
158                        A(VFW_E_NO_AUDIO_HARDWARE)
159                        A(VFW_S_VIDEO_NOT_RENDERED)
160                        A(VFW_S_AUDIO_NOT_RENDERED)
161                        A(VFW_E_RPZA)
162                        A(VFW_S_RPZA)
163                        A(VFW_E_PROCESSOR_NOT_SUITABLE)
164                        A(VFW_E_UNSUPPORTED_AUDIO)
165                        A(VFW_E_UNSUPPORTED_VIDEO)
166                        A(VFW_E_MPEG_NOT_CONSTRAINED)
167                        A(VFW_E_NOT_IN_GRAPH)
168                        A(VFW_S_ESTIMATED)
169                        A(VFW_E_NO_TIME_FORMAT)
170                        A(VFW_E_READ_ONLY)
171                        A(VFW_S_RESERVED)
172                        A(VFW_E_BUFFER_UNDERFLOW)
173                        A(VFW_E_UNSUPPORTED_STREAM)
174                        A(VFW_E_NO_TRANSPORT)
175                        A(VFW_S_STREAM_OFF)
176                        A(VFW_S_CANT_CUE)
177                        A(VFW_E_BAD_VIDEOCD)
178                        A(VFW_S_NO_STOP_TIME)
179                        A(VFW_E_OUT_OF_VIDEO_MEMORY)
180                        A(VFW_E_VP_NEGOTIATION_FAILED)
181                        A(VFW_E_DDRAW_CAPS_NOT_SUITABLE)
182                        A(VFW_E_NO_VP_HARDWARE)
183                        A(VFW_E_NO_CAPTURE_HARDWARE)
184                        A(VFW_E_DVD_OPERATION_INHIBITED)
185                        A(VFW_E_DVD_INVALIDDOMAIN)
186                        A(VFW_E_DVD_NO_BUTTON)
187                        A(VFW_E_DVD_GRAPHNOTREADY)
188                        A(VFW_E_DVD_RENDERFAIL)
189                        A(VFW_E_DVD_DECNOTENOUGH)
190                        A(VFW_E_DDRAW_VERSION_NOT_SUITABLE)
191                        A(VFW_E_COPYPROT_FAILED)
192                        A(VFW_S_NOPREVIEWPIN)
193                        A(VFW_E_TIME_EXPIRED)
194                        A(VFW_S_DVD_NON_ONE_SEQUENTIAL)
195                        A(VFW_E_DVD_WRONG_SPEED)
196                        A(VFW_E_DVD_MENU_DOES_NOT_EXIST)
197                        A(VFW_E_DVD_CMD_CANCELLED)
198                        A(VFW_E_DVD_STATE_WRONG_VERSION)
199                        A(VFW_E_DVD_STATE_CORRUPT)
200                        A(VFW_E_DVD_STATE_WRONG_DISC)
201                        A(VFW_E_DVD_INCOMPATIBLE_REGION)
202                        A(VFW_E_DVD_NO_ATTRIBUTES)
203                        A(VFW_E_DVD_NO_GOUP_PGC)
204                        A(VFW_E_DVD_LOW_PARENTAL_LEVEL)
205                        A(VFW_E_DVD_NOT_IN_KARAOKE_MODE)
206                        A(VFW_S_DVD_CHANNEL_CONTENTS_NOT_AVAILABLE)
207                        A(VFW_S_DVD_NOT_ACCURATE)
208                        A(VFW_E_FRAME_STEP_UNSUPPORTED)
209                        A(VFW_E_DVD_STREAM_DISABLED)
210                        A(VFW_E_DVD_TITLE_UNKNOWN)
211                        A(VFW_E_DVD_INVALID_DISC)
212                        A(VFW_E_DVD_NO_RESUME_INFORMATION)
213                        A(VFW_E_PIN_ALREADY_BLOCKED_ON_THIS_THREAD)
214                        A(VFW_E_PIN_ALREADY_BLOCKED)
215                        A(VFW_E_CERTIFICATION_FAILURE)
216                        A(VFW_E_VMR_NOT_IN_MIXER_MODE)
217                        A(VFW_E_VMR_NO_AP_SUPPLIED)
218                        A(VFW_E_VMR_NO_DEINTERLACE_HW)
219                        A(VFW_E_VMR_NO_PROCAMP_HW)
220                        A(VFW_E_DVD_VMR9_INCOMPATIBLEDEC)
221                        A(VFW_E_VMR_NO_AP_SUPPLIED)
222                        A(VFW_E_VMR_NO_DEINTERLACE_HW)
223                        A(VFW_E_VMR_NO_PROCAMP_HW)
224                        A(VFW_E_DVD_VMR9_INCOMPATIBLEDEC)
225                        A(VFW_E_NO_COPP_HW)
226                        A(VFW_E_DVD_NONBLOCKING)
227                        A(VFW_E_DVD_TOO_MANY_RENDERERS_IN_FILTER_GRAPH)
228                        A(VFW_E_DVD_NON_EVR_RENDERER_IN_FILTER_GRAPH)
229                        A(VFW_E_DVD_RESOLUTION_ERROR)
230                        A(VFW_E_CODECAPI_LINEAR_RANGE)
231                        A(VFW_E_CODECAPI_ENUMERATED)
232                        A(VFW_E_CODECAPI_NO_DEFAULT)
233                        A(VFW_E_CODECAPI_NO_CURRENT_VALUE)
234                        A(VFW_E_DVD_CHAPTER_DOES_NOT_EXIST)
235                        #undef A
236                };
237                for(SIZE_T nIndex = 0; nIndex < DIM(g_pMap); nIndex++)
238                        if(g_pMap[nIndex].nValue == nValue)
239                                return CString(g_pMap[nIndex].pszName);
240                return _T("");
241        }
242        static BOOL IsWmResult(HRESULT nResult, CString* psMessage = NULL)
243        {
244                if(HRESULT_FACILITY(nResult) != FACILITY_NS)
245                        return FALSE;
246                // SUGG: Cache loaded libraries
247                HMODULE hModule = NULL;
248                const SCODE nCode = HRESULT_CODE(nResult);
249                CString sMessage;
250                if(nCode >= 2000 && nCode < 3000) // 2000 -  2999 = ASF (defined in ASFERR.MC)
251                        sMessage = AtlFormatSystemMessage(CDataLibraryMap::LoadLibrary(_T("asferror.dll")), nResult);
252                else
253                        sMessage = AtlFormatSystemMessage(CDataLibraryMap::LoadLibrary(_T("wmerror.dll")), nResult);
254                if(sMessage.IsEmpty())
255                        return FALSE;
256                if(psMessage)
257                        *psMessage = sMessage;
258                return TRUE;
259        }
260        static BOOL IsMfResult(HRESULT nResult, CString* psMessage = NULL)
261        {
262                if(HRESULT_FACILITY(nResult) != FACILITY_MF)
263                        return FALSE;
264                const CString sMessage = AtlFormatSystemMessage(CDataLibraryMap::LoadLibrary(_T("mferror.dll")), nResult);
265                if(sMessage.IsEmpty())
266                        return FALSE;
267                if(psMessage)
268                        *psMessage = sMessage;
269                return TRUE;
270        }
271        static CString LookupMfIdentifier(HRESULT nValue)
272        {
273                static const struct { HRESULT nValue; LPCSTR pszName; } g_pMap[] = 
274                {
275                        #define A(x) { x, #x },
276                        A(MF_E_PLATFORM_NOT_INITIALIZED)
277                        A(MF_E_BUFFERTOOSMALL)
278                        A(MF_E_INVALIDREQUEST)
279                        A(MF_E_INVALIDSTREAMNUMBER)
280                        A(MF_E_INVALIDMEDIATYPE)
281                        A(MF_E_NOTACCEPTING)
282                        A(MF_E_NOT_INITIALIZED)
283                        A(MF_E_UNSUPPORTED_REPRESENTATION)
284                        A(MF_E_NO_MORE_TYPES)
285                        A(MF_E_UNSUPPORTED_SERVICE)
286                        A(MF_E_UNEXPECTED)
287                        A(MF_E_INVALIDNAME)
288                        A(MF_E_INVALIDTYPE)
289                        A(MF_E_INVALID_FILE_FORMAT)
290                        A(MF_E_INVALIDINDEX)
291                        A(MF_E_INVALID_TIMESTAMP)
292                        A(MF_E_UNSUPPORTED_SCHEME)
293                        A(MF_E_UNSUPPORTED_BYTESTREAM_TYPE)
294                        A(MF_E_UNSUPPORTED_TIME_FORMAT)
295                        A(MF_E_NO_SAMPLE_TIMESTAMP)
296                        A(MF_E_NO_SAMPLE_DURATION)
297                        A(MF_E_INVALID_STREAM_DATA)
298                        A(MF_E_RT_UNAVAILABLE)
299                        A(MF_E_UNSUPPORTED_RATE)
300                        A(MF_E_THINNING_UNSUPPORTED)
301                        A(MF_E_REVERSE_UNSUPPORTED)
302                        A(MF_E_UNSUPPORTED_RATE_TRANSITION)
303                        A(MF_E_RATE_CHANGE_PREEMPTED)
304                        A(MF_E_NOT_FOUND)
305                        A(MF_E_NOT_AVAILABLE)
306                        A(MF_E_NO_CLOCK)
307                        A(MF_S_MULTIPLE_BEGIN)
308                        A(MF_E_MULTIPLE_BEGIN)
309                        A(MF_E_MULTIPLE_SUBSCRIBERS)
310                        A(MF_E_TIMER_ORPHANED)
311                        A(MF_E_STATE_TRANSITION_PENDING)
312                        A(MF_E_UNSUPPORTED_STATE_TRANSITION)
313                        A(MF_E_UNRECOVERABLE_ERROR_OCCURRED)
314                        A(MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS)
315                        A(MF_E_SAMPLE_NOT_WRITABLE)
316                        A(MF_E_INVALID_KEY)
317                        A(MF_E_BAD_STARTUP_VERSION)
318                        A(MF_E_UNSUPPORTED_CAPTION)
319                        A(MF_E_INVALID_POSITION)
320                        A(MF_E_ATTRIBUTENOTFOUND)
321                        A(MF_E_PROPERTY_TYPE_NOT_ALLOWED)
322                        A(MF_E_PROPERTY_TYPE_NOT_SUPPORTED)
323                        A(MF_E_PROPERTY_EMPTY)
324                        A(MF_E_PROPERTY_NOT_EMPTY)
325                        A(MF_E_PROPERTY_VECTOR_NOT_ALLOWED)
326                        A(MF_E_PROPERTY_VECTOR_REQUIRED)
327                        A(MF_E_OPERATION_CANCELLED)
328                        A(MF_E_BYTESTREAM_NOT_SEEKABLE)
329                        A(MF_E_DISABLED_IN_SAFEMODE)
330                        A(MF_E_CANNOT_PARSE_BYTESTREAM)
331                        A(MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS)
332                        A(MF_E_MEDIAPROC_WRONGSTATE)
333                        A(MF_E_RT_THROUGHPUT_NOT_AVAILABLE)
334                        A(MF_E_RT_TOO_MANY_CLASSES)
335                        A(MF_E_RT_WOULDBLOCK)
336                        A(MF_E_NO_BITPUMP)
337                        A(MF_E_RT_OUTOFMEMORY)
338                        A(MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED)
339                        A(MF_E_INSUFFICIENT_BUFFER)
340                        A(MF_E_CANNOT_CREATE_SINK)
341                        A(MF_E_BYTESTREAM_UNKNOWN_LENGTH)
342                        A(MF_E_SESSION_PAUSEWHILESTOPPED)
343                        A(MF_S_ACTIVATE_REPLACED)
344                        A(MF_E_FORMAT_CHANGE_NOT_SUPPORTED)
345                        A(MF_E_INVALID_WORKQUEUE)
346                        A(MF_E_DRM_UNSUPPORTED)
347                        A(MF_E_UNAUTHORIZED)
348                        A(MF_E_OUT_OF_RANGE)
349                        A(MF_E_INVALID_CODEC_MERIT)
350                        A(MF_E_HW_MFT_FAILED_START_STREAMING)
351                        A(MF_S_ASF_PARSEINPROGRESS)
352                        A(MF_E_ASF_PARSINGINCOMPLETE)
353                        A(MF_E_ASF_MISSINGDATA)
354                        A(MF_E_ASF_INVALIDDATA)
355                        A(MF_E_ASF_OPAQUEPACKET)
356                        A(MF_E_ASF_NOINDEX)
357                        A(MF_E_ASF_OUTOFRANGE)
358                        A(MF_E_ASF_INDEXNOTLOADED)
359                        A(MF_E_ASF_TOO_MANY_PAYLOADS)
360                        A(MF_E_ASF_UNSUPPORTED_STREAM_TYPE)
361                        A(MF_E_ASF_DROPPED_PACKET)
362                        A(MF_E_NO_EVENTS_AVAILABLE)
363                        A(MF_E_INVALID_STATE_TRANSITION)
364                        A(MF_E_END_OF_STREAM)
365                        A(MF_E_SHUTDOWN)
366                        A(MF_E_MP3_NOTFOUND)
367                        A(MF_E_MP3_OUTOFDATA)
368                        A(MF_E_MP3_NOTMP3)
369                        A(MF_E_MP3_NOTSUPPORTED)
370                        A(MF_E_NO_DURATION)
371                        A(MF_E_INVALID_FORMAT)
372                        A(MF_E_PROPERTY_NOT_FOUND)
373                        A(MF_E_PROPERTY_READ_ONLY)
374                        A(MF_E_PROPERTY_NOT_ALLOWED)
375                        A(MF_E_MEDIA_SOURCE_NOT_STARTED)
376                        A(MF_E_UNSUPPORTED_FORMAT)
377                        A(MF_E_MP3_BAD_CRC)
378                        A(MF_E_NOT_PROTECTED)
379                        A(MF_E_MEDIA_SOURCE_WRONGSTATE)
380                        A(MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED)
381                        A(MF_E_CANNOT_FIND_KEYFRAME_SAMPLE)
382                        A(MF_E_NETWORK_RESOURCE_FAILURE)
383                        A(MF_E_NET_WRITE)
384                        A(MF_E_NET_READ)
385                        A(MF_E_NET_REQUIRE_NETWORK)
386                        A(MF_E_NET_REQUIRE_ASYNC)
387                        A(MF_E_NET_BWLEVEL_NOT_SUPPORTED)
388                        A(MF_E_NET_STREAMGROUPS_NOT_SUPPORTED)
389                        A(MF_E_NET_MANUALSS_NOT_SUPPORTED)
390                        A(MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR)
391                        A(MF_E_NET_CACHESTREAM_NOT_FOUND)
392                        A(MF_I_MANUAL_PROXY)
393                        A(MF_E_NET_REQUIRE_INPUT)
394                        A(MF_E_NET_REDIRECT)
395                        A(MF_E_NET_REDIRECT_TO_PROXY)
396                        A(MF_E_NET_TOO_MANY_REDIRECTS)
397                        A(MF_E_NET_TIMEOUT)
398                        A(MF_E_NET_CLIENT_CLOSE)
399                        A(MF_E_NET_BAD_CONTROL_DATA)
400                        A(MF_E_NET_INCOMPATIBLE_SERVER)
401                        A(MF_E_NET_UNSAFE_URL)
402                        A(MF_E_NET_CACHE_NO_DATA)
403                        A(MF_E_NET_EOL)
404                        A(MF_E_NET_BAD_REQUEST)
405                        A(MF_E_NET_INTERNAL_SERVER_ERROR)
406                        A(MF_E_NET_SESSION_NOT_FOUND)
407                        A(MF_E_NET_NOCONNECTION)
408                        A(MF_E_NET_CONNECTION_FAILURE)
409                        A(MF_E_NET_INCOMPATIBLE_PUSHSERVER)
410                        A(MF_E_NET_SERVER_ACCESSDENIED)
411                        A(MF_E_NET_PROXY_ACCESSDENIED)
412                        A(MF_E_NET_CANNOTCONNECT)
413                        A(MF_E_NET_INVALID_PUSH_TEMPLATE)
414                        A(MF_E_NET_INVALID_PUSH_PUBLISHING_POINT)
415                        A(MF_E_NET_BUSY)
416                        A(MF_E_NET_RESOURCE_GONE)
417                        A(MF_E_NET_ERROR_FROM_PROXY)
418                        A(MF_E_NET_PROXY_TIMEOUT)
419                        A(MF_E_NET_SERVER_UNAVAILABLE)
420                        A(MF_E_NET_TOO_MUCH_DATA)
421                        A(MF_E_NET_SESSION_INVALID)
422                        A(MF_E_OFFLINE_MODE)
423                        A(MF_E_NET_UDP_BLOCKED)
424                        A(MF_E_NET_UNSUPPORTED_CONFIGURATION)
425                        A(MF_E_NET_PROTOCOL_DISABLED)
426                        A(MF_E_ALREADY_INITIALIZED)
427                        A(MF_E_BANDWIDTH_OVERRUN)
428                        A(MF_E_LATE_SAMPLE)
429                        A(MF_E_FLUSH_NEEDED)
430                        A(MF_E_INVALID_PROFILE)
431                        A(MF_E_INDEX_NOT_COMMITTED)
432                        A(MF_E_NO_INDEX)
433                        A(MF_E_CANNOT_INDEX_IN_PLACE)
434                        A(MF_E_MISSING_ASF_LEAKYBUCKET)
435                        A(MF_E_INVALID_ASF_STREAMID)
436                        A(MF_E_STREAMSINK_REMOVED)
437                        A(MF_E_STREAMSINKS_OUT_OF_SYNC)
438                        A(MF_E_STREAMSINKS_FIXED)
439                        A(MF_E_STREAMSINK_EXISTS)
440                        A(MF_E_SAMPLEALLOCATOR_CANCELED)
441                        A(MF_E_SAMPLEALLOCATOR_EMPTY)
442                        A(MF_E_SINK_ALREADYSTOPPED)
443                        A(MF_E_ASF_FILESINK_BITRATE_UNKNOWN)
444                        A(MF_E_SINK_NO_STREAMS)
445                        A(MF_S_SINK_NOT_FINALIZED)
446                        A(MF_E_METADATA_TOO_LONG)
447                        A(MF_E_SINK_NO_SAMPLES_PROCESSED)
448                        A(MF_E_VIDEO_REN_NO_PROCAMP_HW)
449                        A(MF_E_VIDEO_REN_NO_DEINTERLACE_HW)
450                        A(MF_E_VIDEO_REN_COPYPROT_FAILED)
451                        A(MF_E_VIDEO_REN_SURFACE_NOT_SHARED)
452                        A(MF_E_VIDEO_DEVICE_LOCKED)
453                        A(MF_E_NEW_VIDEO_DEVICE)
454                        A(MF_E_NO_VIDEO_SAMPLE_AVAILABLE)
455                        A(MF_E_NO_AUDIO_PLAYBACK_DEVICE)
456                        A(MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE)
457                        A(MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED)
458                        A(MF_E_AUDIO_SERVICE_NOT_RUNNING)
459                        A(MF_E_TOPO_INVALID_OPTIONAL_NODE)
460                        A(MF_E_TOPO_CANNOT_FIND_DECRYPTOR)
461                        A(MF_E_TOPO_CODEC_NOT_FOUND)
462                        A(MF_E_TOPO_CANNOT_CONNECT)
463                        A(MF_E_TOPO_UNSUPPORTED)
464                        A(MF_E_TOPO_INVALID_TIME_ATTRIBUTES)
465                        A(MF_E_TOPO_LOOPS_IN_TOPOLOGY)
466                        A(MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR)
467                        A(MF_E_TOPO_MISSING_STREAM_DESCRIPTOR)
468                        A(MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED)
469                        A(MF_E_TOPO_MISSING_SOURCE)
470                        A(MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED)
471                        A(MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID)
472                        A(MF_S_SEQUENCER_CONTEXT_CANCELED)
473                        A(MF_E_NO_SOURCE_IN_CACHE)
474                        A(MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM)
475                        A(MF_E_TRANSFORM_TYPE_NOT_SET)
476                        A(MF_E_TRANSFORM_STREAM_CHANGE)
477                        A(MF_E_TRANSFORM_INPUT_REMAINING)
478                        A(MF_E_TRANSFORM_PROFILE_MISSING)
479                        A(MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT)
480                        A(MF_E_TRANSFORM_PROFILE_TRUNCATED)
481                        A(MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED)
482                        A(MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG)
483                        A(MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE)
484                        A(MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM)
485                        A(MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG)
486                        A(MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE)
487                        A(MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE)
488                        A(MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE)
489                        A(MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE)
490                        A(MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION)
491                        A(MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES)
492                        A(MF_E_TRANSFORM_NEED_MORE_INPUT)
493                        A(MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG)
494                        A(MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING)
495                        A(MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT)
496                        A(MF_E_UNSUPPORTED_D3D_TYPE)
497                        A(MF_E_TRANSFORM_ASYNC_LOCKED)
498                        A(MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER)
499                        A(MF_E_LICENSE_INCORRECT_RIGHTS)
500                        A(MF_E_LICENSE_OUTOFDATE)
501                        A(MF_E_LICENSE_REQUIRED)
502                        A(MF_E_DRM_HARDWARE_INCONSISTENT)
503                        A(MF_E_NO_CONTENT_PROTECTION_MANAGER)
504                        A(MF_E_LICENSE_RESTORE_NO_RIGHTS)
505                        A(MF_E_BACKUP_RESTRICTED_LICENSE)
506                        A(MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION)
507                        A(MF_S_PROTECTION_NOT_REQUIRED)
508                        A(MF_E_COMPONENT_REVOKED)
509                        A(MF_E_TRUST_DISABLED)
510                        A(MF_E_WMDRMOTA_NO_ACTION)
511                        A(MF_E_WMDRMOTA_ACTION_ALREADY_SET)
512                        A(MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE)
513                        A(MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED)
514                        A(MF_E_WMDRMOTA_ACTION_MISMATCH)
515                        A(MF_E_WMDRMOTA_INVALID_POLICY)
516                        A(MF_E_POLICY_UNSUPPORTED)
517                        A(MF_E_OPL_NOT_SUPPORTED)
518                        A(MF_E_TOPOLOGY_VERIFICATION_FAILED)
519                        A(MF_E_SIGNATURE_VERIFICATION_FAILED)
520                        A(MF_E_DEBUGGING_NOT_ALLOWED)
521                        A(MF_E_CODE_EXPIRED)
522                        A(MF_E_GRL_VERSION_TOO_LOW)
523                        A(MF_E_GRL_RENEWAL_NOT_FOUND)
524                        A(MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND)
525                        A(MF_E_KERNEL_UNTRUSTED)
526                        A(MF_E_PEAUTH_UNTRUSTED)
527                        A(MF_E_NON_PE_PROCESS)
528                        A(MF_E_REBOOT_REQUIRED)
529                        A(MF_S_WAIT_FOR_POLICY_SET)
530                        A(MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT)
531                        A(MF_E_GRL_INVALID_FORMAT)
532                        A(MF_E_GRL_UNRECOGNIZED_FORMAT)
533                        A(MF_E_ALL_PROCESS_RESTART_REQUIRED)
534                        A(MF_E_PROCESS_RESTART_REQUIRED)
535                        A(MF_E_USERMODE_UNTRUSTED)
536                        A(MF_E_PEAUTH_SESSION_NOT_STARTED)
537                        A(MF_E_PEAUTH_PUBLICKEY_REVOKED)
538                        A(MF_E_GRL_ABSENT)
539                        A(MF_S_PE_TRUSTED)
540                        A(MF_E_PE_UNTRUSTED)
541                        A(MF_E_PEAUTH_NOT_STARTED)
542                        A(MF_E_INCOMPATIBLE_SAMPLE_PROTECTION)
543                        A(MF_E_PE_SESSIONS_MAXED)
544                        A(MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED)
545                        A(MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED)
546                        A(MF_E_ITA_UNSUPPORTED_ACTION)
547                        A(MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS)
548                        A(MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS)
549                        A(MF_E_BAD_OPL_STRUCTURE_FORMAT)
550                        A(MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID)
551                        A(MF_E_NO_PMP_HOST)
552                        A(MF_E_ITA_OPL_DATA_NOT_INITIALIZED)
553                        A(MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT)
554                        A(MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT)
555                        A(MF_E_CLOCK_INVALID_CONTINUITY_KEY)
556                        A(MF_E_CLOCK_NO_TIME_SOURCE)
557                        A(MF_E_CLOCK_STATE_ALREADY_SET)
558                        A(MF_E_CLOCK_NOT_SIMPLE)
559                        A(MF_S_CLOCK_STOPPED)
560                        A(MF_E_NO_MORE_DROP_MODES)
561                        A(MF_E_NO_MORE_QUALITY_LEVELS)
562                        A(MF_E_DROPTIME_NOT_SUPPORTED)
563                        A(MF_E_QUALITYKNOB_WAIT_LONGER)
564                        A(MF_E_QM_INVALIDSTATE)
565                        A(MF_E_TRANSCODE_NO_CONTAINERTYPE)
566                        A(MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS)
567                        A(MF_E_TRANSCODE_NO_MATCHING_ENCODER)
568                        A(MF_E_ALLOCATOR_NOT_INITIALIZED)
569                        A(MF_E_ALLOCATOR_NOT_COMMITED)
570                        A(MF_E_ALLOCATOR_ALREADY_COMMITED)
571                        A(MF_E_STREAM_ERROR)
572                        A(MF_E_INVALID_STREAM_STATE)
573                        A(MF_E_HW_STREAM_NOT_CONNECTED)
574                        #undef A
575                };
576                for(SIZE_T nIndex = 0; nIndex < DIM(g_pMap); nIndex++)
577                        if(g_pMap[nIndex].nValue == nValue)
578                                return CString(g_pMap[nIndex].pszName);
579                return _T("");
580        }
581        static BOOL IsWs2Result(HRESULT nResult, CString* psMessage = NULL)
582        {
583                if(HRESULT_FACILITY(nResult) != FACILITY_WIN32)
584                        return FALSE;
585                const SCODE nCode = HRESULT_CODE(nResult);
586                if(nCode < 10000 || nCode >= 11150) // WSABASEERR, ...
587                        return FALSE;
588                const CString sMessage = AtlFormatSystemMessage(CDataLibraryMap::LoadLibrary(_T("ws2_32.dll")), nResult);
589                if(sMessage.IsEmpty())
590                        return FALSE;
591                if(psMessage)
592                        *psMessage = sMessage;
593                return TRUE;
594        }
595        static BOOL IsWinHttpResult(HRESULT nResult, CString* psMessage = NULL)
596        {
597                if(HRESULT_FACILITY(nResult) != FACILITY_WIN32)
598                        return FALSE;
599                const LONG nCode = HRESULT_CODE(nResult);
600                if(nCode < 12000 || nCode >= 12200) // WINHTTP_ERROR_BASE, WINHTTP_ERROR_LAST
601                        return FALSE;
602                const CString sMessage = AtlFormatSystemMessage(CDataLibraryMap::LoadLibrary(_T("winhttp.dll")), nResult);
603                if(sMessage.IsEmpty())
604                        return FALSE;
605                if(psMessage)
606                        *psMessage = sMessage;
607                return TRUE;
608        }
609        static BOOL IsWinInetResult(HRESULT nResult, CString* psMessage = NULL)
610        {
611                if(HRESULT_FACILITY(nResult) != FACILITY_WIN32)
612                        return FALSE;
613                const LONG nCode = HRESULT_CODE(nResult);
614                if(nCode < 12000 || nCode >= 12200) // INTERNET_ERROR_BASE, INTERNET_ERROR_LAST
615                        return FALSE;
616                const CString sMessage = AtlFormatSystemMessage(CDataLibraryMap::LoadLibrary(_T("wininet.dll")), nResult);
617                if(sMessage.IsEmpty())
618                        return FALSE;
619                if(psMessage)
620                        *psMessage = sMessage;
621                return TRUE;
622        }
623
624public:
625// CNotifyIconWindow
626        static ULONGLONG GetCommonControlsVersion() throw()
627        {
628                DWORD nMajorVersion, nMinorVersion;
629                _W(SUCCEEDED(AtlGetCommCtrlVersion(&nMajorVersion, &nMinorVersion)));
630                return (ULONGLONG) ((nMajorVersion << 16) + nMinorVersion) << 32;
631        }
632        static ULONGLONG GetShellVersion() throw()
633        {
634                DWORD nMajorVersion, nMinorVersion;
635                _W(SUCCEEDED(AtlGetShellVersion(&nMajorVersion, &nMinorVersion)));
636                return (ULONGLONG) ((nMajorVersion << 16) + nMinorVersion) << 32;
637        }
638        CNotifyIconWindow()
639        {
640        }
641        HWND Create()
642        {
643                return __super::Create(NULL, rcDefault, _T("AlaxInfo.ShowHresult.NotifyIconWindow"));
644        }
645        static CString GetDefaultInfoTitle()
646        {
647                return AtlLoadString(IDS_NOTIFYICON_DEFAULTTIPTITLE);
648        }
649        static DWORD GetDefaultInfoFlags() throw()
650        {
651                return NIIF_NONE;
652        }
653        VOID SetBalloonToolTip(DWORD nFlags, LPCTSTR pszTitle, LPCTSTR pszText, UINT nTimeout = 15 * 1000)
654        {
655                if(IsWindow() && m_NotifyIconData.uFlags & NIF_INFO)
656                {
657                        m_NotifyIconData.uTimeout = nTimeout;
658                        m_NotifyIconData.dwInfoFlags = nFlags;
659                        _tcsncpy_s(m_NotifyIconData.szInfoTitle, pszTitle, _TRUNCATE);
660                        _tcsncpy_s(m_NotifyIconData.szInfo, pszText, _TRUNCATE);
661                        _W(Shell_NotifyIcon(NIM_MODIFY, &m_NotifyIconData));
662                }
663        }
664        BOOL Process(LPCTSTR pszText)
665        {
666                #pragma region Parse
667                if(_tcslen(pszText) > 24)
668                        return FALSE;
669                CString sText = pszText;
670                sText.Trim();
671                LONGLONG nLongLongResult;
672                if(_tcsnicmp(sText, _T("0x"), 2) == 0)
673                {
674                        if(!StrToInt64Ex(sText, STIF_SUPPORT_HEX, &nLongLongResult))
675                                return FALSE; 
676                } else
677                        nLongLongResult = _ttoi64(sText);
678                const LONG nHighLongLongResult = (LONG) (nLongLongResult >> 32);
679                if(!nLongLongResult || nHighLongLongResult > 0 || nHighLongLongResult < -1)
680                        return FALSE;
681                HRESULT nResult = (LONG) nLongLongResult;
682                #pragma endregion
683                #pragma region Lookup
684                CString sTitle = _T("System"), sMessage, sIdentifier;
685                if(IsQuartzResult(nResult, &sMessage))
686                {
687                        sTitle = _T("DirectShow");
688                        sIdentifier = LookupQuartzIdentifier(nResult);
689                } else if(IsWmResult(nResult, &sMessage))
690                        sTitle = _T("Windows Media");
691                else if(IsMfResult(nResult, &sMessage))
692                {
693                        sTitle = _T("Media Foundation");
694                        sIdentifier = LookupMfIdentifier(nResult);
695                } else if(IsWs2Result(nResult, &sMessage))
696                        sTitle = _T("Sockets");
697                else if(IsWinHttpResult(nResult, &sMessage))
698                        sTitle = _T("WinHTTP");
699                else if(IsWinInetResult(nResult, &sMessage))
700                        sTitle = _T("WinInet");
701                else
702                        sMessage = AtlFormatSystemMessage(nResult);
703                if(sMessage.IsEmpty())
704                        return FALSE;
705                #pragma endregion
706                #pragma region Present
707                _A(!sTitle.IsEmpty());
708                m_sQuery = AtlFormatString(_T("0x%08X"), nResult) + _T(" ") + sIdentifier + _T(" ") + sMessage;
709                CRoArrayT<CString> TitleArray;
710                _W(TitleArray.Add(AtlFormatString(_T("0x%08X"), nResult)) >= 0);
711                if(!sIdentifier.IsEmpty())
712                        _W(TitleArray.Add(sIdentifier) >= 0);
713                if(!sTitle.IsEmpty())
714                        _W(TitleArray.Add(sTitle) >= 0);
715                SetBalloonToolTip(NIIF_INFO, _StringHelper::Join(TitleArray, _T(" - ")), sMessage);
716                #pragma endregion
717                return TRUE;
718        }
719
720// Window message handelrs
721        LRESULT OnCreate(CREATESTRUCT*)
722        {
723                m_nCommonControlsVersion = GetCommonControlsVersion();
724                m_nShellVersion = GetShellVersion();
725                SetIcon(AtlLoadIconImage(IDI_MODULE, LR_DEFAULTCOLOR, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON)), TRUE);
726                SetIcon(AtlLoadIconImage(IDI_MODULE, LR_DEFAULTCOLOR, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)), FALSE);
727                CIcon Icon = AtlLoadIconImage(IDI_MODULE, LR_DEFAULTCOLOR, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON));
728                CString sTip = AtlLoadString(IDS_PROJNAME);
729                ZeroMemory(&m_NotifyIconData, sizeof m_NotifyIconData);
730                m_NotifyIconData.hWnd = m_hWnd;
731                m_NotifyIconData.uID = 1;
732                m_NotifyIconData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_STATE;
733                m_NotifyIconData.uCallbackMessage = WM_NOTIFYICON;
734                m_NotifyIconData.hIcon = Icon;
735                _tcsncpy_s(m_NotifyIconData.szTip, sTip,  _TRUNCATE);
736                if(m_nShellVersion >= 0x0005000000000000) // 5.0
737                {
738                        m_NotifyIconData.cbSize = sizeof m_NotifyIconData; 
739                        m_NotifyIconData.uFlags |= NIF_INFO;
740                        _tcsncpy_s(m_NotifyIconData.szInfoTitle, GetDefaultInfoTitle(), _TRUNCATE);
741                        m_NotifyIconData.dwInfoFlags = GetDefaultInfoFlags();
742                } else
743                        m_NotifyIconData.cbSize = NOTIFYICONDATA_V1_SIZE; 
744                _W(Shell_NotifyIcon(NIM_ADD, &m_NotifyIconData));
745                m_NotifyIconData.uFlags &= ~(NIF_ICON | NIF_STATE);
746                m_NextClipboardViewerWindow = SetClipboardViewer();
747                _pAtlModule->Lock();
748                #if defined(_DEBUG)
749                //Process(AtlFormatString(_T("%d"), 0x80040227)); // VFW_E_WRONG_STATE
750                Process(_T("0xC00D36B9")); // MF_E_NO_MORE_TYPES)
751                //Process(AtlFormatString(_T("0x%x"), HRESULT_FROM_WIN32(WSAEADDRINUSE))); // WSAEADDRINUSE
752                //Process(AtlFormatString(_T("0x%x"), HRESULT_FROM_WIN32(ERROR_WINHTTP_AUTODETECTION_FAILED))); // ERROR_WINHTTP_AUTODETECTION_FAILED
753                #endif // defined(_DEBUG)
754                return TRUE;
755        }
756        LRESULT OnDestroy() throw()
757        {
758                _pAtlModule->Unlock();
759                _W(ChangeClipboardChain(m_NextClipboardViewerWindow));
760                _W(Shell_NotifyIcon(NIM_DELETE, &m_NotifyIconData));
761                m_NotifyIconData.hWnd = NULL;
762                return 0;
763        }
764        LRESULT OnChangeCbChain(CWindow RemovedWindow, CWindow NextWindow)
765        {
766                if(m_NextClipboardViewerWindow == RemovedWindow)
767                        m_NextClipboardViewerWindow = NextWindow;
768                else if(m_NextClipboardViewerWindow)
769                        m_NextClipboardViewerWindow.SendMessage(WM_CHANGECBCHAIN, (WPARAM) (HWND) RemovedWindow, (LPARAM) (HWND) NextWindow);
770                return 0;
771        }
772        LRESULT OnDrawClipboard()
773        {
774                if(OpenClipboard()) 
775                {
776                        _ATLTRY
777                        {
778                                if(IsClipboardFormatAvailable(CF_UNICODETEXT))
779                                {
780                                        CGlobalMemoryWeakHandle DataHandle = (HGLOBAL) GetClipboardData(CF_UNICODETEXT);
781                                        __E(DataHandle);
782                                        CGlobalMemoryHandle::CLockT<WCHAR> pszData(DataHandle);
783                                        Process(CW2CT(pszData));
784                                }
785                        }
786                        _ATLCATCHALL()
787                        {
788                                _W(CloseClipboard());
789                                _ATLRETHROW;
790                        }
791                        _W(CloseClipboard());
792                }
793                return 0;
794        }
795        LRESULT OnMouseMove(UINT, CPoint)
796        {
797                return 0;
798        }
799        LRESULT OnLButtonDblClk(UINT, CPoint)
800        {
801                if(!IsWindowEnabled())
802                        return 0;
803                INT nDefaultCommandIdentifier = ID_APP_ABOUT;
804                //CWaitCursor WaitCursor;
805                if(nDefaultCommandIdentifier)
806                        _W(PostMessage(WM_COMMAND, nDefaultCommandIdentifier));
807                return 0;
808        }
809        LRESULT OnRButtonUp(UINT, CPoint)
810        {
811                CMenu ContainerMenu;
812                _W(ContainerMenu.LoadMenu(IDR_NOTIFYICON));
813                CMenuHandle Menu;
814                INT nDefaultCommandIdentifier = ID_APP_ABOUT;
815                Menu = ContainerMenu.GetSubMenu(0);
816                //CWaitCursor WaitCursor;
817                _A(Menu);
818                if(nDefaultCommandIdentifier)
819                        _W(Menu.SetMenuDefaultItem(nDefaultCommandIdentifier));
820                CPoint Position;
821                GetCursorPos(&Position);
822                _W(SetForegroundWindow(m_hWnd));
823                _W(Menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_VERTICAL, Position.x, Position.y, m_hWnd));
824                return 0;
825        }
826        LRESULT OnNotifyIconBalloonUserClick(UINT, WPARAM, LPARAM)
827        {
828                if(m_sQuery.IsEmpty())
829                        return 0;
830                CWinHttpRequestIdentifier Identifier(_T("http://google.com/search"));
831                Identifier.AddSearchValue(_T("q"), m_sQuery);
832                CWaitCursor WaitCursor;
833                ShellExecute(m_hWnd, NULL, CW2CT(Identifier.GetValue()), NULL, NULL, SW_SHOWDEFAULT);
834                return 0;
835        }
836        LRESULT OnNotifyIcon(UINT uMsg, WPARAM wParam, LPARAM lParam) throw()
837        {
838                _A(wParam == m_NotifyIconData.uID);
839                return SendMessage((UINT) lParam);
840        }
841        LRESULT OnApplicationAbout(UINT, INT, HWND) throw()
842        {
843                CAboutDialog Dialog;
844                EnableWindow(FALSE);
845                Dialog.DoModal();
846                EnableWindow(TRUE);
847                return 0;
848        }
849        LRESULT OnApplicationExit(UINT = 0, INT = ID_APP_EXIT, HWND = NULL) throw()
850        {
851                PostQuitMessage(0);
852                return 0;
853        }
854};
Note: See TracBrowser for help on using the repository browser.