Как мы можем увеличить или уменьшить размер диалогового окна, чтобы оно также могло изменить размер всех кнопок и меню в MFC?

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);
}

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

Я пробовал приведенный выше код, но он возьмет весь идентификатор меню или кнопки вручную, но мне нужно, чтобы это было сделано автоматически.

В системе не предусмотрена автоматическая компоновка диалогов. Лучшее, что вы можете сделать, это изучить реализацию динамического макета MFC. Это очень схематично и касается только самых приземленных сценариев изменения размера. Вам нужно будет оценить, достаточно ли этого для вашего варианта использования (вы не можете изменить размер строки меню).

IInspectable 21.12.2022 12:56

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

Aman Anand 27.12.2022 07:31

Если вы хотите переместить окно, вы вызываете MoveWindow API (или SetWindowPos, если вам нужно больше контроля).

IInspectable 28.12.2022 10:00

Я подозреваю, что у вас есть проблема с продолжительностью цикла вашей переменной font, так как она уничтожается, когда эта функция завершается. Я предлагаю вам попробовать сделать его членом класса, а не локальным.

sergiol 28.12.2022 16:56

@sergiol Я тоже это сделал, но размер кнопки все равно не увеличивается.

Aman Anand 29.12.2022 05:30

Я сделал это вручную, изменив тип размера и тип перемещения в свойствах каждой отдельной кнопки, и они начали работать правильно, но я хочу сделать это автоматически с помощью программы, поэтому, если у вас есть какие-либо идеи, пожалуйста, дайте мне знать @Vlad Feinstein

Aman Anand 29.12.2022 08:43

@AmanAnand Для изменения размера в зависимости от того, что находится внутри кнопки, лучше всего попробовать CMFCButton::SizeToContent и CMFCMenuButton::SizeToContent. Но вы должны сделать это один за другим. Обратите внимание, что это не CButton объекты класса, а производные классы, которые расширяют стандартную CButton функциональность.

sergiol 29.12.2022 11:01

в том то и дело, вручную не могу, надо автоматом

Aman Anand 29.12.2022 11:28

есть ли способ, которым мы можем соединить родительский диалог и дочерний диалог таким образом, чтобы, если мы изменим шрифт или размер кнопки родительского диалога, он также был реализован в дочерних диалогах. @IInspectable

Aman Anand 02.01.2023 10:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
9
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я пробовал приведенный выше код, но он возьмет весь идентификатор меню или кнопки вручную, но мне нужно, чтобы это было сделано автоматически.

Вы можете автоматизировать это с помощью простого цикла:

font.DeleteObject();
font.CreateFont(...);
for (CWnd* wnd = GetWindow(GW_CHILD); wnd != NULL; wnd = wnd->GetWindow(GW_HWNDNEXT))
{
  wnd->SetFont(&font);
}

Спасибо за ваш ответ, но все же это только увеличивает размер шрифта статического текста, но я также хочу изменить кнопку (каждый тип кнопки), размер меню.

Aman Anand 22.12.2022 06:56

@AmanAnand Это работает для всех элементов управления. Убедитесь, что ваш шрифт НЕ является локальной переменной (которая будет уничтожена в конце вызова функции), вместо этого объявите его как член класса вашего диалогового окна.

Vlad Feinstein 22.12.2022 21:03

Я пытался объявить это как член класса диалога, но проблемы, которые я получаю, в первую очередь работают правильно, но после второго раза программа прерывается и показывает ошибку, поскольку у вашего приложения есть точка останова.

Aman Anand 23.12.2022 07:02

@AmanAnand Вы не можете переназначить новый шрифт (или любой другой объект GDI), вам нужно сначала удалить предыдущий объект. Я добавил эту часть в свой ответ.

Vlad Feinstein 23.12.2022 21:12

да, но размер кнопки не увеличивается должным образом, похоже, что текст внутри кнопки становится скрытым, если они увеличиваются, потому что увеличивается только текст, а не поле кнопки.

Aman Anand 26.12.2022 05:53

а также положение кнопки и все фиксируется, но я хочу, чтобы они меняли положение в соответствии с увеличением или уменьшением, чтобы оно выглядело эффективно. Спасибо

Aman Anand 26.12.2022 06:21

@AmanAnand Я ответил на часть о масштабировании шрифта. Динамический макет был рассмотрен IInspectable в его первом комментарии:

Vlad Feinstein 28.12.2022 01:12

есть ли способ, которым мы можем соединить родительский диалог и дочерний диалог таким образом, чтобы, если мы изменим шрифт или размер кнопки родительского диалога, он также был реализован в дочерних диалогах. @Влад Файнштейн

Aman Anand 02.01.2023 10:39

Другие вопросы по теме