// Метод OnInitDialog класса CDialogDlg

BOOL CDialogDlg::OnInitDialog() {

 CDialog::OnInitDialog();

 // Добавление строки "About…" к системному меню приложения

 // Проверяем, что идентификатор IDM_ABOUTBOX относится к

 // системным командам

 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

 ASSERT(IDM_ABOUTBOX < 0xF000);

 CMenu* pSysMenu = GetSystemMenu(FALSE);

 CString strAboutMenu;

 strAboutMenu.LoadString(IDS_ABOUTBOX);

 if (!strAboutMenu.IsEmpty()) {

  pSysMenu->AppendMenu(MF_SEPARATOR);

  pSysMenu->AppendMenu(MF_STRING,  IDM_ABOUTBOX, strAboutMenu);

 }

 // Выбираем пиктограмму для диалоговой панели. Если главное

 // окно приложения не является диалоговой панелью, этот код

 // не нужен

 SetIcon(m_hIcon,TRUE); // выбираем пиктограмму большого

                        // размера

 SetIcon(m_hIcon,FALSE); // выбираем пиктограмму маленького

                         // размера

 // TODO: Здесь вы можете выполнить дополнительную

 // инициализацию

 return TRUE;

}

// Метод OnSysCommand класса CDialogDlg

void CDialogDlg::OnSysCommand(UINT nID, LPARAM lParam) {

 if ((nID & 0xFFF0) == IDM_ABOUTBOX) {

  CAboutDlg dlgAbout;

  dlgAbout.DoModal();

 } else {

  CDialog::OnSysCommand(nID, lParam);

 }

}

// Если вы добавили кнопку минимизации к диалоговой панели,

// следующий код нужен, чтобы отобразить пиктограмму

// Метод OnPaint класса CDialogDlg

void CDialogDlg::OnPaint() {

 if (IsIconic()) {

  CPaintDC dc(this); // контекст устройства

  SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

  // Выравниваем по центру пиктограмму

  int cxIcon = GetSystemMetrics(SM_CXICON);

  int cyIcon = GetSystemMetrics(SM_CYICON);

  CRect rect;

  GetClientRect(▭);

  int x = (rect.Width() – cxIcon + 1) / 2;

  int y = (rect.Height() – cyIcon + 1) / 2;

  // Отображаем пиктограмму

  dc.DrawIcon(x, y, m_hIcon);

 } else {

  CDialog::OnPaint();

 }

}

// Данный метод вызывается для определения формы курсора,

// отображаемого, когда пользователь переносит

// минимизированное окно

// Метод OnQueryDragIcon класса CDialogDlg

HCURSOR CDialogDlg::OnQueryDragIcon() {

 return (HCURSOR) m_hIcon;

}

Таблица сообщений класса CDialogDlg

Файл DialogDlg.cpp содержит таблицу сообщений класса CDialogDlg. Таблица включает три макрокоманды. Как видите, они расположены в блоке AFX_MSG_MAP, поэтому для управления ими используется ClassWizard.

BEGIN_MESSAGE_MAP(CDialogDlg, CDialog)

 //{{AFX_MSG_MAP(CDialogDlg)

 ON_WM_SYSCOMMAND()

 ON_WM_PAINT()

 ON_WM_QUERYDRAGICON()

 //}}AFX_MSG_MAP

END_MESSAGE_MAP()

При помощи ClassWizard вы можете обнаружить, что макрокоманды выполняют обработку сообщений WM_SYSCOMMAND, WM_PAINT, WM_QUERYDRAGICON, вызывая для этого методы OnSysCommand, OnPaint и OnQueryDragIcon.

Конструктор класса CDialogDlg

Конструктор класса CDialogDlg вызывает конструктор базового класса CDialog. При этом ему передается идентификатор диалоговой панели IDD и идентификатор главного окна приложения pParent. При создании объекта класса CDialogDlg не указываются никакие параметры. Поэтому pParent по умолчанию принимается равным NULL.

Перейти на страницу:

Все книги серии Библиотека системного программиста

Похожие книги