Подскажите ,почему открывается только одно немодальное диалоговое окно.
Код:
#include <windows.h>
#include "resource.h"
const char szClassName[]="WinLabClass\0";
HINSTANCE hInstance=0;
HWND hDlg=(HWND)-1;
INT_PTR CALLBACK ModalProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK ModeLessProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
HWND hWnd=0;
WNDCLASSA WndClass;
MSG Msg;
WndClass.lpszClassName=szClassName;
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.hCursor=LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon=LoadIcon(0, IDI_WINLOGO);
WndClass.lpszMenuName=MAKEINTRESOURCEA(IDR_MENU);
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.style=CS_HREDRAW | CS_VREDRAW;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
if(RegisterClassA(& WndClass) == FALSE)
return 0;
hWnd=CreateWindowA(szClassName, 0, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, SW_SHOW);
SetTimer(hWnd, 1, 1000, NULL);
while(GetMessageA(& Msg, hWnd, 0, 0) != FALSE){
if(IsWindow(hDlg) == FALSE || IsDialogMessage(hDlg, & Msg) == FALSE){
TranslateMessage(& Msg);
DispatchMessage(& Msg);
}
}
return(Msg.wParam);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDC=0;
PAINTSTRUCT ps;
static RECT Rect;
static int t=0;
static char mass[0x10]={0};
switch(message)
{
case WM_TIMER:
t++;
itoa(t, mass, 10);
hDC=GetDC(hWnd);
DrawTextA(hDC, mass, -1, & Rect, DT_CENTER | DT_VCENTER);
ReleaseDC(hWnd, hDC);
break;
case WM_PAINT:
GetClientRect(hWnd, & Rect);
hDC=BeginPaint(hWnd,& ps);
itoa(t, mass, 10);
DrawTextA(hDC, mass, -1, & Rect, DT_CENTER | DT_VCENTER);
EndPaint(hWnd,& ps);
break;
case WM_COMMAND:
if(LOWORD(wParam) == ID_MES1)
MessageBoxA(hWnd, "Message 1 was called.\0", "Info...\0", MB_OK | MB_ICONINFORMATION);
else if(LOWORD(wParam) == ID_MES2)
MessageBoxA(hWnd, "Message 2 was called.\0", "Info...\0", MB_OK | MB_ICONINFORMATION);
break;
case WM_LBUTTONUP:
DialogBoxParamA(hInstance, MAKEINTRESOURCEA(IDD_DIALOG), hWnd, ModalProc, NULL);
break;
case WM_RBUTTONUP:
if(IsWindow(hDlg) == FALSE){
hDlg=CreateDialogA(hInstance, MAKEINTRESOURCEA(IDD_LESS), hWnd, ModeLessProc);
ShowWindow(hDlg, SW_SHOW);
}
break;
case WM_DESTROY:
KillTimer(hWnd, 1);
PostQuitMessage(0);
break;
default:
break;
}
return(DefWindowProc(hWnd, message, wParam, lParam));
}
INT_PTR CALLBACK ModalProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
SetWindowTextA(hDlg, "Modal Dialog\0");
return TRUE;
break;
case WM_COMMAND:
if(LOWORD(wParam) == ID_OK)
EndDialog(hDlg, ID_OK);
break;
case WM_CLOSE:
EndDialog(hDlg, ID_OK);
break;
default:
break;
}
return FALSE;
}
INT_PTR CALLBACK ModeLessProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
SetWindowTextA(hDlg, "Modeless Dialog\0");
return TRUE;
break;
case WM_COMMAND:
if(LOWORD(wParam) == ID_OK)
DestroyWindow(hDlg);
break;
case WM_CLOSE:
DestroyWindow(hDlg);
break;
default:
break;
}
return FALSE;
}