|
http://tikitak.narod.ru ---- Главная страница сайта
Шаг 56 - Эффекты OnSysCommand
Создание проекта
Работаем с нашим диалоговым окном из прошлого проекта.
Создание кода
Виртуальная функция в классе диалогового окна
class CTestDlg : public CDialog
{
public:
.......
afx_msg void OnSysCommand( UINT i, LONG l);
.......
};
Реализация
void CTestDlg::OnSysCommand( UINT i, LONG l)
{
............
// В описании разговор идет именно о этой части.
...........
}
И обязательно в макросах событий
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
..........
ON_WM_SYSCOMMAND()
..........
END_MESSAGE_MAP()
Описание
OnSysCommand позволяет Вам обрабатывать многие события связанные с изменением окна, как минимизация, восстановление, перемещение и т.д. Для оценки того, что эта команда значит, сделайте так.
void CTestDlg::OnSysCommand( UINT i, LONG l)
{
}
И запустите. Вы будете потрясены. Окно нельзя переместить, свернуть, окно, как китайская стена, просто непреклонно. Даже к системному меню нет доступа.
Для того, чтобы оживить все-таки окно, надо вызвать функцию OnSysCommand у предка. Но эта функция переданна из далека. Еще от прадедушки CWnd.
void CTestDlg::OnSysCommand( UINT i, LONG l)
{
CDialog::OnSysCommand(i,l);
}
И все нормально. Если Вы меня спросите зачем всё это делается, я буду страшно удивлен. Честно. Теперь мы можем отслеживать минимизацию, перемещение окна , или запретить, например, восстановление. Все что надо сделать - разобраться с параметрами передающимися в эту функцию. Первый параметр, который у нас UINT отвечает как раз за тип команды. Давайте отловим событие минимизации.
void CTestDlg::OnSysCommand( UINT i, LONG l)
{
if (i!=SC_MINIMIZE) CDialog::OnSysCommand(i,l);
}
Окно не будет уменьшаться. Мы просто проглотили эту команду, не дав её обработать. Последний параметр в OnSysCommand отвечает за координаты курсора, если команда выбрана мышью из меню.
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|