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

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

22.12.2015, 18:03. Показов 3187. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru