Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2011, 19:16   #1
AnnJoy
Новичок
Джуниор
 
Регистрация: 15.06.2011
Сообщений: 1
По умолчанию Диалоговые окна.

Подскажите ,почему открывается только одно немодальное диалоговое окно.
Код:
#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;
}

Последний раз редактировалось AnnJoy; 15.06.2011 в 19:18.
AnnJoy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
try-except Диалоговые окна ввода/вывода сообщений Типизированные файлы Ko$ Помощь студентам 5 16.03.2011 12:26
Программа диалоговые окна BaRSyk174 Общие вопросы Delphi 4 14.09.2009 21:53
Файлы и диалоговые окна FeNiX_IU8 Помощь студентам 1 15.05.2009 20:38
Отловить движение курсора, диалоговые сообщения. Deight Общие вопросы Delphi 15 17.11.2008 11:28
Как зделать обычные диалоговые окна? Editor Общие вопросы Delphi 1 03.05.2008 09:07