Показать сообщение отдельно

  #5  
Старый 09.12.2009, 21:43
St0nX
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме:
2823587

Репутация: 106
Отправить сообщение для St0nX с помощью ICQ
По умолчанию

Цитата:
Сообщение от kopBaJIoJI  
Подскажите функцию, которая при закрытии формы выдавала бы информационное сообщение с кнопками Да, Нет, Отмена. При нажатии да - открывается окно для сохранения файла, при нажатии нет - программа закрывается, при отмене - остаётся всё как было.
необходимо перехватить событие закрытие формы и вызвать свою функцию. В Qt допустим достаточно переопределить функцию закрытия формы в классе пример отлично разбирается в книге Qt 4. Программирование GUI на С++. В WinAPI примерно так:
PHP код:
#include <windows.h>

// Объявления функций
BOOL RegClass(WNDPROCLPCTSTRUINT);
LRESULT CALLBACK WndProc(HWND,UINTWPARAMLPARAM); // оконные процедуры

HINSTANCE hInstance;
char szMainClass[] = "MainClass";
char szTitle[] = "Пример 1.2";

// Главная функция приложения
int WINAPI WinMain(HINSTANCE hInstHINSTANCE hPrevInst,
                
LPSTR IpszCmdLineint nCmdShow)
{
    
MSG msg;
    
hInstance hInst;
    
HWND hwnd;
    if (!
RegClass(WndProcszMainClassCOLOR_DESKTOP))
        return 
FALSE;
    
// До создания окна узнаём габариты экрана в пикселях
    
int w GetSystemMetrics(SM_CXSCREEN) - 1// Ширина
    
int h GetSystemMetrics(SM_CYSCREEN) - 1// Высота 
    
hwnd CreateWindow(szMainClassszTitle,
        
WS_POPUPWINDOW WS_CAPTION |
        
WS_MINIMIZEBOX WS_VISIBLE,
        
00wh00hInstanceNULL);
    if (!
hwnd) return FALSE;
    while (
GetMessage(&msg000)) DispatchMessage(&msg);
    return 
msg.wParam;
}

BOOL RegClass(WNDPROC ProcLPCTSTR szNameUINT brBackground)
{
    
WNDCLASS wc;
    
wc.style wc.cbClsExtra wc.cbWndExtra 0;
    
wc.lpfnWndProc Proc;
    
wc.hInstance hInstance;
    
wc.hIcon LoadIcon(NULLIDI_APPLICATION);
    
wc.hCursor LoadCursor(NULLIDC_ARROW);
    
wc.hbrBackground = (HBRUSH)(brBackground 1);
    
wc.lpszMenuName = (LPCTSTRNULL;
    
wc.lpszClassName szName;
    return (
RegisterClass(&wc) != 0);
}

LRESULT CALLBACK WndProc(HWND hwndUINT msg,
                         
WPARAM wParamLPARAM lParam)
{
    switch (
msg)
    {
    case 
WM_DESTROY:
        {
        
PostQuitMessage(0);
        return 
0;
        }
    case 
WM_CLOSE:
        {
        
// ТУТ ТВОЙ МЕСАДЖ БОКС И ЕГО ОБРАБОТКА
        
return 0;
        }
    }
    return 
DefWindowProc(hwndmsgwParamlParam);

 
Ответить с цитированием