Позвоните SetScrollSizes
, чтобы показать полосы прокрутки в определенных размерах:
CRect rect;
GetClientRect(rect);
//this multiplication is to make sure the scrollbar is visible
//remove it in actual code.
rect.right *= 2;
rect.bottom *= 2;
SetScrollSizes(MM_TEXT, rect.Size());
Но это не правильный метод в целом.
Вариант 1:
Вы можете просто зайти в редактор ресурсов, выбрать диалог, выбрать свойства диалога и изменить размер шрифта диалога по умолчанию.Увеличьте размер шрифта до 9 или выше, это автоматически увеличит размер диалогового окна и элементов управления, а также увеличит размер шрифта.
Опция 2:
В свойствах диалога вы также увидитераздел под названием «Динамический макет».Это позволяет масштабировать элементы управления при изменении размера или перемещать их вверх / вниз и влево / вправо.
Опция 3:
Изменение шрифта в шаблоне диалога во время выполнения.Для этого необходимо переопределить CFormView::Create
, что в свою очередь вызывает CreateDlg
.Эти имена функций должны быть объявлены в точности так, как показано ниже.
Обратите внимание, что шрифт в шаблоне диалога может быть изменен только один раз, до загрузки диалога.
Пример для Visual Studio 2017 (этот кодможет быть несовместимо со старыми версиями MFC)
BOOL XFormView::CreateDlg(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
{
CDialogTemplate dlt;
if(dlt.Load(lpszTemplateName)))
{
// set your own font
dlt.SetFont(L"Arial", 20);
HINSTANCE hInst = AfxFindResourceHandle(lpszTemplateName, RT_DIALOG);
LPCDLGTEMPLATE dlgtemplate = (LPCDLGTEMPLATE)GlobalLock(dlt.m_hTemplate);
// create a modeless dialog
BOOL bSuccess = CreateDlgIndirect(dlgtemplate, pParentWnd, hInst);
GlobalUnlock(dlt.m_hTemplate);
return bSuccess;
}
return CFormView::CreateDlg(lpszTemplateName, pParentWnd);
}
BOOL XFormView::Create
( LPCTSTR lpszClassName
, LPCTSTR lpszWindowName
, DWORD dwRequestedStyle
, const RECT& rect
, CWnd* pParentWnd
, UINT nID
, CCreateContext* pContext
);
{
ASSERT(pParentWnd != NULL);
ASSERT(m_lpszTemplateName != NULL);
m_pCreateContext = pContext; // save state for later OnCreate
// call PreCreateWindow to get prefered extended style
CREATESTRUCT cs;
memset(&cs, 0, sizeof(CREATESTRUCT));
if(dwRequestedStyle == 0)
dwRequestedStyle = AFX_WS_DEFAULT_VIEW;
cs.style = dwRequestedStyle;
if(!PreCreateWindow(cs))
return FALSE;
// create a modeless dialog
if(!CreateDlg(m_lpszTemplateName, pParentWnd))
return FALSE;
m_pCreateContext = NULL;
ModifyStyle(WS_BORDER | WS_CAPTION, cs.style & (WS_BORDER | WS_CAPTION));
ModifyStyleEx(WS_EX_CLIENTEDGE, cs.dwExStyle & WS_EX_CLIENTEDGE);
SetDlgCtrlID(nID);
CRect rectTemplate;
GetWindowRect(rectTemplate);
SetScrollSizes(MM_TEXT, rectTemplate.Size());
// initialize controls etc
if(!ExecuteDlgInit(m_lpszTemplateName))
return FALSE;
// force the size requested
SetWindowPos(NULL, rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top,
SWP_NOZORDER | SWP_NOACTIVATE);
// make visible if requested
if(dwRequestedStyle & WS_VISIBLE)
ShowWindow(SW_NORMAL);
return TRUE;
}
и определение класса в XFormView.h ДОЛЖНО содержать следующие строки
protected:
BOOL Create
( LPCTSTR lpszClassName
, LPCTSTR lpszWindowName
, DWORD dwRequestedStyle
, const RECT& rect
, CWnd* pParentWnd
, UINT nID
, CCreateContext* pContext
);
BOOL CreateDlg(LPCTSTR lpszTemplateName, CWnd* pParentWnd);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
Объявление OnCreate
абсолютно необходимо.
Без этого объявления ничего не происходит !!!
OnCreate
объявляется только во включаемом файле, но не определяется в файле CPP.