Modal and Modeless Dialogbox
////////////////////////////////////////////////////////////////////////////
//Microsoft Visual Studio generated resource script.
/////////////////////////////////////////////////////////////////////////////
/*
IDD_MODELESS DIALOG DISCARDABLE 0, 0, 186, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
CONTROL "Red",IDC_RED,"Button",BS_AUTORADIOBUTTON,17,23,84,10
CONTROL "Yellow",IDC_YELLOW,"Button",BS_AUTORADIOBUTTON,17,41,84,
10
CONTROL "Green",IDC_GREEN,"Button",BS_AUTORADIOBUTTON,17,57,84,
10
GROUPBOX "Static",IDC_STATIC,7,15,126,59
END
IDD_MODAL DIALOG DISCARDABLE 0, 0, 186, 90
STYLE DS_SYSMODAL | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Sans Serif"
BEGIN
LTEXT "Static",IDC_STATIC1,26,23,75,16
END
*/
/////////////////////////////////////////////////////////////////////////////
#include
#include "resource.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK ModelessDialogProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK ModalDialogProc(HWND, UINT, WPARAM, LPARAM);
void CreateModelessDialogBox(HWND);
void CreateModalDialogBox(HWND);
HBRUSH hBrush;
COLORREF bk_color = RGB(255,255,255);
int WINAPI wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PWSTR pCmdLine,
int nCmdShow)
{
MSG msg;
HWND hwnd;
WNDCLASS wc = {0};
wc.lpszClassName = TEXT("myWindowClass");
wc.hInstance = hInstance;
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpfnWndProc = WndProc;
RegisterClass(&wc);
hwnd = CreateWindow(
wc.lpszClassName,
TEXT("Dialog Box Demo"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100,
100,
700,
200,
NULL,
NULL,
hInstance,
NULL);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
static HINSTANCE hInst = GetModuleHandle(NULL);
switch(msg)
{
case WM_CREATE:
CreateWindow(
TEXT("BUTTON"),
TEXT("Show Modeless"),
WS_CHILD | WS_VISIBLE,
20,
50,
130,
35,
hwnd,
(HMENU)IDD_MODELESS,
NULL,
NULL);
CreateWindow(
TEXT("BUTTON"),
TEXT("Show Modal"),
WS_CHILD | WS_VISIBLE,
170,
50,
130,
35,
hwnd,
(HMENU)IDD_MODAL,
NULL,
NULL);
hBrush = CreateSolidBrush(bk_color);
return 0;
case WM_ERASEBKGND:
{
RECT rc;
GetClientRect(hwnd,&rc);
FillRect((HDC)wParam,&rc,hBrush);
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDD_MODELESS:
CreateDialog(
hInst,
MAKEINTRESOURCE(IDD_MODELESS),
hwnd,
ModelessDialogProc);
break;
case IDD_MODAL:
DialogBox(
hInst,
MAKEINTRESOURCE(IDD_MODAL),
hwnd,
ModalDialogProc);
break;
}
return 0;
case WM_DESTROY:
DeleteObject(hBrush);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
BOOL CALLBACK ModelessDialogProc(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
HWND mainWindow = GetParent(hwnd);
switch(msg)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if(HIWORD(wParam)==BN_CLICKED)
{
DeleteObject(hBrush);
switch(LOWORD(wParam))
{
case IDC_RED:
bk_color = RGB(255,0,0);
break;
case IDC_YELLOW:
bk_color = RGB(255,255,0);
break;
case IDC_GREEN:
bk_color = RGB(0,255,0);
break;
}
hBrush = CreateSolidBrush(bk_color);
InvalidateRect(mainWindow,NULL,TRUE);
}
return TRUE;
case WM_CLOSE:
DestroyWindow(hwnd);
return TRUE;
}
return FALSE;
}
BOOL CALLBACK ModalDialogProc(HWND hwnd,
UINT msg,
WPARAM wParam,
LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
SetDlgItemText(
hwnd,
IDC_STATIC1,
TEXT("A simple demonstration of a modal dialog window."));
return TRUE;
case WM_CLOSE:
EndDialog(hwnd,0);
return TRUE;
}
return FALSE;
}
void CreateModelessDialogBox(HWND hwnd)
{
HINSTANCE hInst = GetModuleHandle(NULL);
HWND hDlg = CreateDialog(
hInst,
MAKEINTRESOURCE(IDD_MODELESS),
hwnd,
ModelessDialogProc);
ShowWindow(hDlg,SW_SHOW);
}
void CreateModalDialogBox(HWND hwnd)
{
HINSTANCE hInst = GetModuleHandle(NULL);
DialogBox(
hInst,
MAKEINTRESOURCE(IDD_MODAL),
hwnd,
ModalDialogProc);
}