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); }