Шаг 294 - Размер элемента и размер диалога

Давайте рассмотрим задачу поместить на диалоговую панель элемент управления, например, CListBox и сделать так, чтобы при изменении размера диалоговой панели размер элемента изменялся под размер диалоговой панели.

Создаем приложение MFC AppWizard с именем TestSize типа SDI, а базовый класс для вида выберем CFormView.

Помещаем на диалоговое окно формы, а оно будет иметь такой идентификатор IDD_TESTSIZE_FORM. Элемент управления у нас список ListBox и у него идентификатор по умолчанию будет IDC_LIST1. Скомпилируем и запустим приложение.

294_1.gif (5678 b)

Мы видим, что элемент управления занимает часть окна, а не все окно. Нам бы хотелось, чтобы он занимал все окно. При изменении размеров формы вызывается функция 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); 
}

Теперь наш элемент управления будет изменять размеры вместе с окном:

294_2.gif (2875 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 1.01.2001