
09.12.2009, 21:43
|
|
Участник форума
Регистрация: 19.05.2007
Сообщений: 281
Провел на форуме: 2823587
Репутация:
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);
}
|
|
|