FAQ:WinAPI VCPP:запрет появления полос прокруток на CFormView

Материал из Весельчак У
Версия от 22:11, 3 октября 2009; RXL (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Как запретить появление полос прокруток на форме класса CFormView, когда пользователь делает размер главного окна меньше размера формы?

Это можно сделать методом SetScaleToFitSize():

void CMyView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
 
	// скрываем полосы прокрутки
	GetParentFrame()->RecalcLayout();
 
	// это уберёт полосы прокрутки со вьюхи
	ResizeParentToFit();
 
	SIZE s={0, 0};
	SetScaleToFitSize(s);
	// далее вызовется обработчик OnPaint(), о котором ниже
 
	//...
}

Также обратите внимание на одну особенность: в отладочной версии программы вызов OnPaint после выполнения SetScaleToFitSize() с параметром s={0, 0} происходит с ошибкой (программа при этом завершается). Обходится это так:

void CMyView::OnPaint()
{
	#ifdef _DEBUG
		CPaintDC dc(this);
	#else
		CFormView::OnPaint();
	#endif
}

Или так:

void CMyView::OnPaint()
{
	CPaintDC dc(this);
}