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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2011, 15:15   #1
Alexander1205
Пользователь
 
Аватар для Alexander1205
 
Регистрация: 22.01.2011
Сообщений: 78
По умолчанию модальное_диалоговое_окно

Привет, комрады!! Имеется вот такая задачка:
Создать окно, которое при попытке закрытия открывает модальный диалог, отображающий обратный отчет.
Как я понимаю, здесь нужен макрос таймера, а в нем уже прописать Dialog,так?

Код:
#include<Windows.h>
#include "resource.h"
 
 
int i;
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hInstPrev,LPSTR CmdLine,int Show)
{
        return DialogBox(hInst,(LPCWSTR) IDD_DIALOG1,NULL,DlgProc);
}
BOOL CALLBACK DlgProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)
{
        switch(uMessage)
        {
                case WM_CLOSE:
                        EndDialog(hWnd,0);
                        return TRUE;
    }
    return FALSE;
}
UINT SetTimer(HWND hWnd,UINT id,UINT time,TIMERPROC TimerProc)
Alexander1205 вне форума Ответить с цитированием
Старый 17.09.2011, 15:39   #2
Alexander1205
Пользователь
 
Аватар для Alexander1205
 
Регистрация: 22.01.2011
Сообщений: 78
По умолчанию

вот, кое-что нарыл:

Код:
#include <Windows.h>
#include <tchar.h>
#include "resource1.h"

int BackCounter;
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
VOID CALLBACK TimerProc(HWND,UINT,UINT,DWORD);
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR CmdLine, int CmdShow)
{
	WNDCLASS w;
	w.style=CS_HREDRAW|CS_VREDRAW;
	w.cbClsExtra=0;
	w.cbWndExtra=0;
	w.lpfnWndProc=WndProc;
	w.hInstance=hInst;
	w.hIcon=LoadIcon(NULL, IDI_APPLICATION);
	w.hCursor=LoadCursor(NULL, IDC_ARROW);
	w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	w.lpszMenuName=NULL;
	w.lpszClassName=_TEXT("Test");

	if(!RegisterClass(&w)){return 0;}

	HWND hWnd;
	hWnd=CreateWindow(_TEXT("Test"),_TEXT(""), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInst, NULL);
	ShowWindow (hWnd, CmdShow);
	UpdateWindow(hWnd);

	MSG Msg;
	while (GetMessage(&Msg, NULL,NULL,NULL))
	{
		TranslateMessage (&Msg);
		DispatchMessage (&Msg);
	}
	return Msg.wParam;
	return DialogBox(hInst,(LPCWSTR)IDD_DIALOG1,NULL,DlgProc);
}

LRESULT CALLBACK WndProc (HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
	switch (uMessage)
	{	
	case WM_CLOSE:
		SetTimer(hWnd,1,10000,NULL);
		DlgProc(hWnd,uMessage,wParam,lParam);
		BackCounter =10;
		break;	
	case WM_TIMER:
		KillTimer(hWnd,1);
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc (hWnd, uMessage, wParam, lParam);
	}
	return 0;
}

VOID CALLBACK TimerProc(HWND hWnd,UINT uMessage,UINT id,DWORD time)
{
	BackCounter--;
	CHAR caption[30]="Window closes after ";
	char tmp[10];
	strcat(caption,itoa(BackCounter,tmp,10));
	strcat(caption, " seconds");
	SetWindowTextA(hWnd,caption);
	KillTimer(hWnd,2);
}

BOOL CALLBACK DlgProc(HWND hWnd,UINT uMessage,WPARAM wParam,LPARAM lParam)
{
	switch(uMessage)
	{
		SetTimer(hWnd,2,10000,TimerProc);
				
	case WM_CLOSE:
		KillTimer(hWnd,2);
		EndDialog(hWnd,0);

		return TRUE;
	}
	return FALSE;
}
Alexander1205 вне форума Ответить с цитированием
Ответ


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