class CMyWnd : public CWnd
{
// здесь описание вашего класса окна
...
// обработчик системных команд
afx_msg void OnSysCommand(UINT ID, LPARAM p);
...
}
// карта обрабатываемых сообщений
BEGIN_MESSAGE_MAP (CMyWnd, CWnd)
...
ON_WM_SYSCOMMAND()
...
END_MESSAGE_MAP ()
afx_msg void CMyWnd::OnSysCommand(UINT ID, LPARAM p)
{
switch (ID)
{
...
case SC_CLOSE:
// здесь запускаете нужную функцию
break;
...
}
CWnd::OnSysCommand(ID, p); // стандартный обработчик
}
Необходимо при закрытии окна дождаться выполнения функции.Что делать?
Необходимо, что бы при нажатии на крест (выход из программы) программа подождала выполнение некоторой функции
Цитата:
Originally posted by ol777
Необходимо, что бы при нажатии на крест (выход из программы) программа подождала выполнение некоторой функции
Необходимо, что бы при нажатии на крест (выход из программы) программа подождала выполнение некоторой функции
В каком смысле "подождала выполнение"? Если функция должна выполниться перед выходом из программы, то в своем классе окна нужно перегруэить обработчик системных команд, чтобы он перехватывал сообщение о закрытии окна. Это может выглядеть примерно так:
Код:
А если нужно дождаться завершения уже выполняемой функции (например, выполняемой в отдельном потоке), то просто в ее начале устанавливаете какую-нибудь переменную, а в конце сбрасываете. И в OnSysCommand проверяете - если стоит, то завершаете его досрочно, а если нет - выполняете стандартный CWnd::OnSysCommand.
Цитата:
Originally posted by ol777
Необходимо, что бы при нажатии на крест (выход из программы) программа подождала выполнение некоторой функции
Необходимо, что бы при нажатии на крест (выход из программы) программа подождала выполнение некоторой функции
функция в другом потоке выполняется или как?
в принципе для этих целей есть обработчик OnClose:
Код:
void CBASEDlg::OnClose()
{
if (m_bStartMachine==FALSE){
int i;
i=MessageBox("Вы хотите завершить программу?",0,MB_YESNO|MB_ICONWARNING);
if (i==IDYES){
CDialog::OnOK();
};
};
}
{
if (m_bStartMachine==FALSE){
int i;
i=MessageBox("Вы хотите завершить программу?",0,MB_YESNO|MB_ICONWARNING);
if (i==IDYES){
CDialog::OnOK();
};
};
}
в данном примере, нажатие на крест или Quit игнорируется если переменная m_bStartMachine равна TRUE.
Цитата:
Originally posted by gerard
В каком смысле "подождала выполнение"? Если функция должна выполниться перед выходом из программы, то в своем классе окна нужно перегруэить обработчик системных команд, чтобы он перехватывал сообщение о закрытии окна. Это может выглядеть примерно так:
В каком смысле "подождала выполнение"? Если функция должна выполниться перед выходом из программы, то в своем классе окна нужно перегруэить обработчик системных команд, чтобы он перехватывал сообщение о закрытии окна. Это может выглядеть примерно так:
А если мне надо проверить перeменную класса документа? Приложение SDI
Цитата:
Originally posted by ol777
А если мне надо проверить перeменную класса документа? Приложение SDI
А если мне надо проверить перeменную класса документа? Приложение SDI
Опять же что значит "проверить"? Был ли документ изменен? Тогда вызывайте соответствующий метод из CDocument (IsModified(), кажется).
Цитата:
Originally posted by gerard
Опять же что значит "проверить"? Был ли документ изменен? Тогда вызывайте соответствующий метод из CDocument (IsModified(), кажется).
Опять же что значит "проверить"? Был ли документ изменен? Тогда вызывайте соответствующий метод из CDocument (IsModified(), кажется).
Да, спасибо. SaveModified () помогло.