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

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

Репутация: 106
По умолчанию

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

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

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

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

BOOL RegClass(WNDPROC Proc, LPCTSTR szName, UINT brBackground)
{
    
WNDCLASS wc;
    
wc.style = wc.cbClsExtra = wc.cbWndExtra = 0;
    
wc.lpfnWndProc = Proc;
    
wc.hInstance = hInstance;
    
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    
wc.hbrBackground = (HBRUSH)(brBackground + 1);
    
wc.lpszMenuName = (LPCTSTR) NULL;
    
wc.lpszClassName = szName;
    return (
RegisterClass(&wc) != 0);
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
                         
WPARAM wParam, LPARAM lParam)
{
    switch (
msg)
    {
    case 
WM_DESTROY:
        {
        
PostQuitMessage(0);
        return 
0;
        }
    case 
WM_CLOSE:
        {
        
// ТУТ ТВОЙ МЕСАДЖ БОКС И ЕГО ОБРАБОТКА
        
return 0;
        }
    }
    return 
DefWindowProc(hwnd, msg, wParam, lParam);
} 
 
Ответить с цитированием