Давайте рассмотрим задачу поместить на диалоговую панель элемент управления, например, CListBox и сделать так, чтобы при изменении размера диалоговой панели размер элемента изменялся под размер диалоговой панели.
Создаем приложение MFC AppWizard с именем TestSize типа SDI, а базовый класс для вида выберем CFormView.
Помещаем на диалоговое окно формы, а оно будет иметь такой идентификатор IDD_TESTSIZE_FORM. Элемент управления у нас список ListBox и у него идентификатор по умолчанию будет IDC_LIST1. Скомпилируем и запустим приложение.
Мы видим, что элемент управления занимает часть окна, а не все окно. Нам бы хотелось, чтобы он занимал все окно. При изменении размеров формы вызывается функция OnSize() класса формы. Давайте ее перегрузим. Это делается в Add Windows Message handles, сообщение WM_SIZE.
void CTestSizeView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); // TODO: Add your message handler code here }
Здесь нам нужно получить ссылку на этот элемент управления и изменить его размер. Давайте сделаем это:
void CTestSizeView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); CListCtrl* ct=NULL; CRect cr; GetClientRect(cr); ct=(CListCtrl*)GetDlgItem(IDC_LIST1); if (ct) ct->MoveWindow(0,0,cr.right,cr.bottom); }
Теперь наш элемент управления будет изменять размеры вместе с окном: