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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2010, 14:32   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Запрет закрытия окна

Доброго времени суток уважаемые, нуждаюсь в маленькой помощи ибо я немного устал уже искать. Не msdn, не google толком мне ничего не объяснил, поэтому создал тему для знатоков.
Мне необходимо обработать кнопку закрытия окна (Console) то есть при попытке закрыть окно, в этот момент мне необходимо выполнить какие-нить мои действия. Собственно, подскажите где мне по вкуривать полезную информацию, за ранее благодарен за любую помощь.

Вот мои неудачные попытки:

1.
Код:
/* void MainThread()
{
	HWND hWnd;
	
	if (DestroyWindow(hWnd) == TRUE)
	{
		MessageBoxA(0, "WM_DESTROY", "Warning!", MB_OK);
	}

	//CWnd::
} */
Кстати, если использовать функцию CloseWindows, при выполнение этой функции окно без проблем сворачивается, но к сожалению не в случае когда кнопка сворачивания будет нажата.

2.
Код:
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    hWnd = GetConsoleWindow();

    switch(uMsg)
    {    
        case WM_CLOSE:
	    {
	        MessageBoxA(0, "WM_CLOSE", "Warning!", MB_OK);
	    } break;

        case WM_DESTROY:
	    {
		MessageBoxA(0, "WM_DESTROY", "Warning!", MB_OK);
	    } break;
    default: break;
    }
    return WindowProc(hWnd, uMsg, wParam, lParam);
}
Безрезультатно!

Последний раз редактировалось coNsept; 21.08.2010 в 14:39.
coNsept вне форума Ответить с цитированием
Старый 21.08.2010, 14:50   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

А если так:
Код:
case WM_CLOSE:
  {
    MessageBoxA(0, "WM_CLOSE", "Warning!", MB_OK);
    return 0;
  }
  break;
pu4koff вне форума Ответить с цитированием
Старый 21.08.2010, 16:03   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Код:
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
    {    
        case WM_CLOSE:
			{
				MessageBoxA(0, "WM_CLOSE", "Warning!", MB_OK); return 0;
			} break;

		case WM_DESTROY:
			{
				MessageBoxA(0, "WM_DESTROY", "Warning!", MB_OK); ExitProcess(0);
			} break;
        default: break;
    }
	return WindowProc(hWnd, uMsg, wParam, lParam);
}

void MainThread()
{
	HWND hWnd;
	hWnd = GetConsoleWindow();
	WindowProc(hWnd, WM_DESTROY, NULL, NULL);
}
Вот так еще работает, но окно автоматом закрывает, а мне нужно по случаю нажатия на кнопку "крестик", то есть чтобы событие определилось в зависимости от нажатия, а не так как делаю я, задаю это в ручную.

Последний раз редактировалось coNsept; 21.08.2010 в 16:07.
coNsept вне форума Ответить с цитированием
Старый 21.08.2010, 16:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Тебе нужно обрабатывать сообщение WM_SYSCOMMAND и его параметр SC_CLOSE
Код:
	case WM_SYSCOMMAND:
		switch(wParam) {
			case SC_CLOSE:		 
				MessageBox(GetForegroundWindow(),(LPCWSTR)"dasda",(LPCWSTR)"dasdasd",0);
				break;
		}
		break;
Ну короче типа такого....
I'm learning to live...

Последний раз редактировалось Stilet; 21.08.2010 в 16:11.
Stilet вне форума Ответить с цитированием
Старый 21.08.2010, 16:44   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Не получается, по нажатию кнопки сообщение не обрабатывается...

Код:
LRESULT CALLBACK MainWndProc(
    HWND hwnd,        // handle to window
    UINT uMsg,        // message identifier
    WPARAM wParam,    // first message parameter
    LPARAM lParam)    // second message parameter
{ 
 
    switch (uMsg) 
    { 
        case WM_CREATE: 
			MessageBoxA(NULL, "+", "+", MB_OK); ExitProcess(0); 
 
        case WM_PAINT: 
			MessageBoxA(NULL, "+", "+", MB_OK); ExitProcess(0);
 
        case WM_SIZE: 
			MessageBoxA(NULL, "+", "+", MB_OK); ExitProcess(0); 

	case WM_CLOSE:
			MessageBoxA(NULL, "+", "+", MB_OK); ExitProcess(0);
 
       // case WM_DESTROY: 
			//MessageBoxA(NULL, "+", "+", MB_OK); ExitProcess(0);

	case WM_SYSCOMMAND:
			switch(wParam){
			case SC_CLOSE:		
				{ 
					//MessageBox(GetForegroundWindow(),(LPCWSTR)"dasda",(LPCWSTR)"dasdasd",0);
					MessageBoxA(NULL, "+", "+", MB_OK); ExitProcess(0);
				}
				break;
			}
		        break;
        default: 
			return DefWindowProc(hwnd, uMsg, wParam, lParam); 		
    } 
    return 0; 
}

int _tmain(int argc, _TCHAR* argv[])
{
	HWND hWnd;
	hWnd = GetConsoleWindow();
	UINT uMsg;
        WPARAM wParam;
	CreateThread(NULL, NULL, LPTHREAD_START_ROUTINE(MainWndProc(hWnd, uMsg, wParam, NULL)), NULL, 0, 0); CloseHandle(MainWndProc);
}

Последний раз редактировалось coNsept; 21.08.2010 в 16:50.
coNsept вне форума Ответить с цитированием
Старый 21.08.2010, 16:56   #6
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

Цитата:
coNsept
Цитата:
мне нужно по случаю нажатия на кнопку "крестик", то есть чтобы событие определилось в зависимости от нажатия,
попробуй вот так:
Код:
case WM_CLOSE:
         {
        
         int result =  MessageBox(hwnd, "Выйти?",
                                        "Приложение",
                                        MB_YESNO | MB_ICONQUESTION);
        
         if (result == IDYES) 
            return (DefWindowProc(hwnd, msg, wparam, lparam));
         else 
             return(0); 

         } break;
код рабочий проверял
блин туплю я...не так тему понял...

Последний раз редактировалось ThisIzGame; 21.08.2010 в 17:10.
ThisIzGame вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отсусутствует кнопка закрытия окна Айгуля Общие вопросы Delphi 10 11.06.2010 20:08
Запрет закрытия чужого окна DV-Karpov Общие вопросы Delphi 2 20.09.2009 10:26
Как место меню закрытия окна вставить что-то свое? chandrasecar Win Api 12 12.10.2008 01:45
Обработка события закрытия окна в С# Kriziun Общие вопросы .NET 2 14.04.2008 14:06
Перехват закрытия окна GAGARIN-NEW Общие вопросы Delphi 3 11.11.2007 12:30