message box non modal

closed account (zwA4jE8b)
how do I make a messagebox display that is not modal

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
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
		case WM_DESTROY:
		{
			PostQuitMessage(0);
			return 0;
		} break;
		case WM_KEYDOWN:
		{
			switch (wParam)
			{
			case VK_NUMPAD4:
				_freq--;
				if(_freq < 1.0)
					_freq = 1.0;
				break;
			case VK_NUMPAD6:
				_freq++;
				break;
			case VK_NUMPAD8:
				_amp++;
				if(_amp > 200)
					_amp = 200;
				break;
			case VK_NUMPAD2:
				_amp--;
				if(_amp < 0)
					_amp = 0;
				break;
			case VK_SUBTRACT:
				_sTime++;
				if(_sTime > 50)
					_sTime = 50;
				break;
			case VK_ADD:
				_sTime--;
				if(_sTime < 10)
					_sTime = 10;
				break;
			case 0x48:
				MessageBox(NULL, "NUMPAD + : Increase speed\n"
						   "NUMPAD - : Decrease speed\n"
						   "NUMPAD 8 : Increase amplitude\n"
						   "NUMPAD 2 : Decrease amplitude\n"
						   "NUMPAD 4 : Increase frequency\n"
						   "NUMPAD 6 : Decrease frequency\n"
						   "\nChanges are small, hold the button",
						   "Help", MB_ICONASTERISK);
				break;
			}
			return 0;
		} break;
     }
     return DefWindowProc(hWnd, message, wParam, lParam);
 }


when h is pressed, I want the message box to display but allow the calling window to continue.
Last edited on
You need to create your own message box by using CreateDialog()

http://msdn.microsoft.com/en-us/library/ms645434(v=vs.85).aspx
closed account (zwA4jE8b)
Thank you!
By the way, if you are using CreateDialog() as your main window, you'll have to set a member of your class differently, like this --

wc.cbWndExtra=DLGWINDOWEXTRA;
Last edited on
closed account (zwA4jE8b)
Maybe you can help me a little more.

I have a main window, I just want a dialog box to popup to display the help.

What shall I use as the lpName parameter int CreateDialog()?

Line 107 is where i call CreateDialog and INT_PTR CALLBACK DialogProc is the function


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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <Windows.h>
#include <math.h>

#define screen_width 800
#define screen_height 600
#define pi 3.14159

COLORREF blue = RGB(0, 0, 255);

double _freq = 50;
int _sTime = 10, _amp = 100;

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK DialogProc(__in  HWND hwndDlg, __in  UINT uMsg, __in  WPARAM wParam, __in  LPARAM lParam);
void wavefunc(HWND, HDC);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
	HWND hWnd;
	WNDCLASSEX wc;
	HDC hDC;

	ZeroMemory(&wc, sizeof(WNDCLASSEX));

	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WindowProc;
	wc.hInstance = hInstance;
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hIcon = (HICON)LoadImage(NULL, "C:\\Visual Studio 2010\\Icons\\Smiley.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
	wc.lpszClassName = "SineWave";

	RegisterClassEx(&wc);

	hWnd = CreateWindowEx(NULL,
                          "SineWave", "SineWave",
                          WS_SYSMENU,
                          0, 45,
                          screen_width, screen_height,
                          NULL, NULL,
                          hInstance,
                          NULL);

	ShowWindow(hWnd, nCmdShow);
	hDC = GetDC(hWnd);

	MSG msg;

	while(TRUE)
	{
		while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{DispatchMessage(&msg);}

		if(msg.message == WM_QUIT)
			break;

		wavefunc(hWnd, hDC);
	}
	return msg.wParam;
}

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
		case WM_DESTROY:
		{
			PostQuitMessage(0);
			return 0;
		} break;
		case WM_KEYDOWN:
		{
			switch (wParam)
			{
			case VK_NUMPAD4:
				_freq--;
				if(_freq < 1.0)
					_freq = 1.0;
				break;
			case VK_NUMPAD6:
				_freq++;
				break;
			case VK_NUMPAD8:
				_amp++;
				if(_amp > 200)
					_amp = 200;
				break;
			case VK_NUMPAD2:
				_amp--;
				if(_amp < 0)
					_amp = 0;
				break;
			case VK_SUBTRACT:
				_sTime++;
				if(_sTime > 50)
					_sTime = 50;
				break;
			case VK_ADD:
				_sTime--;
				if(_sTime < 10)
					_sTime = 10;
				break;
			case 0x48:
				CreateDialog(NULL, , hWnd, DialogProc);
				break;
			}
			return 0;
		} break;
     }
     return DefWindowProc(hWnd, message, wParam, lParam);
 }

INT_PTR CALLBACK DialogProc(__in  HWND hwndDlg, __in  UINT uMsg, __in  WPARAM wParam, __in  LPARAM lParam)
{
	MessageBox(NULL, "NUMPAD + : Increase speed\n"
					 "NUMPAD - : Decrease speed\n"
					 "NUMPAD 8 : Increase amplitude\n"
					 "NUMPAD 2 : Decrease amplitude\n"
					 "NUMPAD 4 : Increase frequency\n"
					 "NUMPAD 6 : Decrease frequency\n"
					 "\nChanges are small, hold the button",
					 "Help", MB_OK);
	return 0;
}

void wavefunc(HWND hWnd, HDC hDC)
{
	double full = 2 * pi * _freq;
	static double _x = 0;
	int _y = (sin(_x/_freq)*_amp) + 300;
	if (_x >= full)
		_x -= full;
	SetPixel(hDC, 600, _y, blue);
	ScrollWindow(hWnd, -1, 0, NULL, NULL);
	_x++;
	Sleep(_sTime);
}
Last edited on
Topic archived. No new replies allowed.