void CMFCApplication6Dlg::OnFontIncreasefont()
{
/*LPCTSTR text = _T("Hello World");
SetDlgItemTextW(IDD_MFCAPPLICATION6_DIALOG,text);*/
Correct rect;
GetClientRect(&rect);
x = rect.Height();
int y = rect.Width();
cout << x << endl;
cout << y << endl;
SetWindowPos(NULL, 200, 300, x + 150, y + 10, SWP_NOMOVE);
CFont font;
font.CreateFont(
fon + 5, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial")); // lpszFacename
fon = fon + 5;
GetDlgItem(IDC_STATIC1)->SetFont(&font);
GetDlgItem(IDC_STATIC2)->SetFont(&font);
GetDlgItem(IDOK)->SetFont(&font);
GetDlgItem(IDC_EDIT2)->SetFont(&font);
}
Я хочу изменить размер диагонали таким образом, чтобы размер всех кнопок и меню менялся одновременно.
Я пробовал приведенный выше код, но он возьмет весь идентификатор меню или кнопки вручную, но мне нужно, чтобы это было сделано автоматически.
как я могу изменить положение кнопки относительно изменения размера диагонали, чтобы она выглядела организованной.
Если вы хотите переместить окно, вы вызываете MoveWindow API (или SetWindowPos, если вам нужно больше контроля).
Я подозреваю, что у вас есть проблема с продолжительностью цикла вашей переменной font
, так как она уничтожается, когда эта функция завершается. Я предлагаю вам попробовать сделать его членом класса, а не локальным.
@sergiol Я тоже это сделал, но размер кнопки все равно не увеличивается.
Я сделал это вручную, изменив тип размера и тип перемещения в свойствах каждой отдельной кнопки, и они начали работать правильно, но я хочу сделать это автоматически с помощью программы, поэтому, если у вас есть какие-либо идеи, пожалуйста, дайте мне знать @Vlad Feinstein
@AmanAnand Для изменения размера в зависимости от того, что находится внутри кнопки, лучше всего попробовать CMFCButton::SizeToContent
и CMFCMenuButton::SizeToContent
. Но вы должны сделать это один за другим. Обратите внимание, что это не CButton
объекты класса, а производные классы, которые расширяют стандартную CButton
функциональность.
в том то и дело, вручную не могу, надо автоматом
есть ли способ, которым мы можем соединить родительский диалог и дочерний диалог таким образом, чтобы, если мы изменим шрифт или размер кнопки родительского диалога, он также был реализован в дочерних диалогах. @IInspectable
Я пробовал приведенный выше код, но он возьмет весь идентификатор меню или кнопки вручную, но мне нужно, чтобы это было сделано автоматически.
Вы можете автоматизировать это с помощью простого цикла:
font.DeleteObject();
font.CreateFont(...);
for (CWnd* wnd = GetWindow(GW_CHILD); wnd != NULL; wnd = wnd->GetWindow(GW_HWNDNEXT))
{
wnd->SetFont(&font);
}
Спасибо за ваш ответ, но все же это только увеличивает размер шрифта статического текста, но я также хочу изменить кнопку (каждый тип кнопки), размер меню.
@AmanAnand Это работает для всех элементов управления. Убедитесь, что ваш шрифт НЕ является локальной переменной (которая будет уничтожена в конце вызова функции), вместо этого объявите его как член класса вашего диалогового окна.
Я пытался объявить это как член класса диалога, но проблемы, которые я получаю, в первую очередь работают правильно, но после второго раза программа прерывается и показывает ошибку, поскольку у вашего приложения есть точка останова.
@AmanAnand Вы не можете переназначить новый шрифт (или любой другой объект GDI), вам нужно сначала удалить предыдущий объект. Я добавил эту часть в свой ответ.
да, но размер кнопки не увеличивается должным образом, похоже, что текст внутри кнопки становится скрытым, если они увеличиваются, потому что увеличивается только текст, а не поле кнопки.
а также положение кнопки и все фиксируется, но я хочу, чтобы они меняли положение в соответствии с увеличением или уменьшением, чтобы оно выглядело эффективно. Спасибо
@AmanAnand Я ответил на часть о масштабировании шрифта. Динамический макет был рассмотрен IInspectable в его первом комментарии:
есть ли способ, которым мы можем соединить родительский диалог и дочерний диалог таким образом, чтобы, если мы изменим шрифт или размер кнопки родительского диалога, он также был реализован в дочерних диалогах. @Влад Файнштейн
В системе не предусмотрена автоматическая компоновка диалогов. Лучшее, что вы можете сделать, это изучить реализацию динамического макета MFC. Это очень схематично и касается только самых приземленных сценариев изменения размера. Вам нужно будет оценить, достаточно ли этого для вашего варианта использования (вы не можете изменить размер строки меню).