-
Notifications
You must be signed in to change notification settings - Fork 1
/
ModelessMessageBox.h
67 lines (57 loc) · 1.56 KB
/
ModelessMessageBox.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#pragma once
/********************************************************************
created: 2008/11/23
created: 23:11:2008 11:16
filename: ModelessMessageBox.h
file path:
file base: ModelessMessageBox
file ext: h
author: Shay
purpose: Creating a message box not on the stack, without
Stopping the code flow.
Using thread and message box data on the heap.
usage: ModelessMessageBox(NULL, sEvent, L"Debug events form menu", MB_OK);
*********************************************************************/
class _ModelessMessageBox
{
protected:
struct MessageData
{
HWND hWnd;
CString lpText;
CString lpCaption;
UINT uType;
};
static DWORD WINAPI DoMessageBoxThreadProc(LPVOID lpParameter)
{
if(lpParameter == NULL)
return 1L;
MessageData * pData= static_cast<MessageData *>(lpParameter);
if (NULL == pData )
return 1L;
//else
::MessageBox(pData->hWnd, pData->lpText, pData->lpCaption, pData->uType);
delete pData;
return 0L;
}
public:
static void Show( HWND hWnd = NULL,
LPCTSTR lpText = "",
LPCTSTR lpCaption = "",
UINT uType = MB_OK
)
{
MessageData * pMessageData = new MessageData;
pMessageData->hWnd= hWnd;
pMessageData->lpText = lpText;
pMessageData->lpCaption = lpCaption;
pMessageData->uType = uType;
LPDWORD threadId = 0;
CreateThread(NULL, 0, DoMessageBoxThreadProc, pMessageData/*(LPVOID)&m_messageData*/, 0, threadId);
}
};
void ModelessMessageBox(HWND hWnd = NULL,
LPCTSTR lpText = "",
LPCTSTR lpCaption = "",
UINT uType = MB_OK
);