Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10

MFC: Дизайн проекта и изменение размера окна

22.12.2015, 18:03. Показов 3255. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем сделал класс Доска (class Board) , который знает о своих размерах и размещение ячеек (class Cell ) на ней(Не шахматное).
1. Должны ли эти классы уметь рисовать себя ?
То есть иметь функций в которых будет выполняться отрисовка в заданный CDC ?

То есть хочу сделать такие функций , а после вызывать их уже во View.

(Мне эти паттерны прям покоя не дают ).

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

2. Как узнав размеры доски - доска определена как поле класса Document , установить в соответствий с этим размеры окна ?

работает так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;APTION | WS_SYSMENU | FWS_ADDTOTITLE | FWS_ADDTOTITLE;
 
  cs.style &= ~(LONG) FWS_ADDTOTITLE;
 
  cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 2; 
  cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 2; 
  cs.y = ((cs.cy * 2) - cs.cy) / 2;
  cs.x = ((cs.cx * 2) - cs.cx) / 2;
  
  return CFrameWnd::PreCreateWindow(cs);
}
но мне нужно это сделать в классе документа, такие же изменения не работают там
C++
1
this->setWindowsPos
не помогает
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2015, 18:03
Ответы с готовыми решениями:

Изменение размера обьектов при изменении размера графического окна
Можно ли в pascalABC.net сделать следующее: чтобы приизменении размера графического окна изменялись и размеры обьектов.Зарание спасибо:-|

Qml изменение размера Canvas при изменении размера окна
Может есть какой нибудь способ, чтобы при изменении размера окна (в моем случае window) изменялся размер рисунка Canvas (увеличивался или...

Изменение размера окна -> изменение размера картинки
Есть картинка на Homepage, как сделать так, что бы при изменении окна браузера размер картинки автоматически изменялся соответственно...

4
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146
22.12.2015, 19:03
Если вы из класса документа делаете такой вызов:
C++
1
this->setWindowsPos
, то это работать не будет в принципе, ибо Документ не есть Окно. Главное Окно вытаскиваете (из любого места в проге) функцией AfxGetMainWnd(), а с ним уже пляшете дальше, например SetWindowPos(). Если вышеупомянутая функция не работает как я описал(не помню есть ли в CWnd метод SetWindowPos), то извлекаете из главного Окна его дескриптор -
C++
1
HWND hMainWnd = AfxGetMainWnd()->GetSafeHwnd()
А с ним проходят все функции из WinAPI.
1
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10
22.12.2015, 20:05  [ТС]
vkiper, Спасибо ) хотелось из View установить размеры, не из документа
0
17 / 17 / 6
Регистрация: 11.11.2015
Сообщений: 146
22.12.2015, 20:26
Объект класса View явлается вложенным в объект класса Frame. В плане окон иерархия такая же. Исходя из этого, вы не можете, задав позицию дочернему окну, ожидать, что родительское окно поменяет эту позицию. Так не работает.
Пример кода, который я дал вам выше, должен рулить.

Добавлено через 15 минут
Поскольку я не трогал MFC очень-очень .... давно, то решил проверить на всякий случай. Слепил стандартный проект без ничего. Попробовал вставить следующий код:
C++
1
AfxGetMainWnd()->SetWindowPos(NULL, 20, 20, 200, 200, SWP_NOZORDER);
в следующие функции - CMyView::PreCreateWindow(), CMyView::OnCreate(). Ни хрена не работает. Очевидно, сначала должен завершиться процесс формирования главного окна. Забыл.
Есть еще хорошая ф-я OnInitialUpdate(), она вызывается, когда все окна созданы.
В ней все сработало пучком. Перегрузите ее и вставляйте.
1
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
23.12.2015, 11:40
Цитата Сообщение от Qazan Посмотреть сообщение
1. Должны ли эти классы уметь рисовать себя ?
То есть иметь функций в которых будет выполняться отрисовка в заданный CDC ?
Да по сути как вам будет угодно и удобно. Можете давать классу "Cell" CDC, чтобы он нарисовал себя сам, а можете из класса "Board" рисовать ячейки, спрашивая у них данные (позиция, размер, содержимое).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2015, 11:40
Помогаю со студенческими работами здесь

Изменение размера окна перетягиванием за края. Как сделать это возможным у нестандартного окна?
Есть окно: <Window x:Class="Program.PlayerWnd" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ...

Изменение размера TableView от размера окна
Как подогнать размер tableview под размер окна, ни где не могу найти как вызвать обработчик событий(слотов) на изменение размеров окна. ...

Изменение размера окна
Здравствуйте, дамы и господа. Есть интересный вопрос по библиотеке 2D Graphics. Данный код был успешно взят с java tutorials, но при его...

Изменение размера окна
Скажите пожалуйста как сделать чтобы при изменении размера формы изменялись размеры и других элементов?

Изменение размера окна
Работаю в QtCreator. Делаю приложение. Там есть главное окно (MainWindow). Туда я запихнула Plain Text Edit. Теперь, когда я изменяю размер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru