![]() |
|
|
![]()
|
|
| GGoga |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.5.2007 Где: Харьков Репутация: нет Всего: нет |
Здравствуйте, уважаемые господа программисты. Помогите разобраться с проблемой начинающему программисту.
А проблема заключается в следующем: С помощью мастера MFC создаю SDI приложение, представление которого наследую от CFormView. Я хочу, чтобы запускаемое окно имело свойства, которые требуются мне, а именно: положение окна центрировалось относительно экрана, имело высоту и ширину пропорциональную экрану, а также загружало иконку, которую создал я. Чтобы это реализовать, я прописываю следующий код в обработчике InitInstance() класса приложения:
Однако, при запуске программы сначала запускается стандартное окошко (созданное приложением), которое имеет собственные размеры, положение на экране и иконку, потом оно исчезает и запускается мое окно с прописанными свойствами (появление и исчезновение первого окна длится около 1 сек. - мелочь, но не приятно...). Я хочу этого в своем мелком проекте избежать, пусть он хоть и небольшой и пишется для получения навыков в программировании, но будет, по крайней мере, красивым Так вот у меня вопрос, что мне нужно сделать, чтобы добиться требуемого результата? Может мой код прописать в другом обработчике, или что-то добавить для скрытия из виду стандартного окна, или убрать что-то в автоматически сгенерированном коде? Подскажите, кто знает решение проблемы, заранее ОГРОМНОЕ СПАСИБО!!! |
|||
|
||||
| Прохожий |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 12.1.2007 Репутация: 1 Всего: 1 |
В CMainFrame есть такая функция где и задаётся нужный стиль и положение окна
|
|||
|
||||
| GGoga |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.5.2007 Где: Харьков Репутация: нет Всего: нет |
А как тогда загрузить иконку, чтобы не появлялась иконка по умолчанию? Это можно сделать в PreCreateWindow? И еще такой вопрос: можно ли установить позицию окна в центре относительно экрана не производя расчетов? Просто переменная CREATESTRUCT& cs имеет для этого 2 свойства: x и y, и чтобы разместить собственное окно центрировано, необходимо произвести соответствующие расчеты координат левого верхнего угла прямоугольника... Можно ли это сделать не производя расчетов, в том смысле, есть ли уже какая-нибудь стандартная функция для этого? Заранее спасибо! |
||||
|
|||||
| Прохожий |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 12.1.2007 Репутация: 1 Всего: 1 |
Проще всего заменить имеющуюся своей или использовать SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1), FALSE); Тамже в функции int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
Есть что-то с ходу не могу сказать. Может как-то можно использовать вот это CenterWindow(CWnd*); навскидку? Это сообщение отредактировал(а) Прохожий - 2.7.2007, 12:41 |
||||
|
|||||
| GGoga |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.5.2007 Где: Харьков Репутация: нет Всего: нет |
У меня еще вот такой вопрос: почему я из обработчика BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) не могу получить указатель на главное окно? И вообще, можно ли это сделать? А делаю я это следующим образом:
Вот так я пытаюсь (выделено жирным) управлять главным окном из вышеуказанного обработчика, только не могу получить на него (на главное окно) указатель... Подскажите, можно ли так делать, а если можно, то почему в результате возвращается 0-вой результат? Заранее СПАСИБО!!! Добавлено через 5 минут и 38 секунд Иконку сделал как Вы и говорили - изменил ту, что по умолчанию, но все равно, хотелось бы знать, как это можно сделать программно. |
||||||||
|
|||||||||
| GGoga |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.5.2007 Где: Харьков Репутация: нет Всего: нет |
Проблему с предыдущим вопросом решил, оказывается, что главное окно еще не существует в момент вызова обработчика BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) класса CMainFrame (формы). И как всегда, решение одного вопроса порождает новый... :(
А можно ли (если можно, то в каком обработчике) вообще в этом классе (классе формы) в момент, когда окно еще не является видимым для пользователя произвести его настройки (центрировать, установить размеры, загрузить иконку и т.д.)? Просто я еще не совсем разбираюсь с принципами того, как и что за чем вызывается, поэтому, пожалуйста, не удивляйтесь моим столь тупым вопросам... Просто мне кажется слишком примитивным, например, центрировать окно с помощью вычисления соответсвующих координат левого верхнего угла, если для этого уже есть готовая функция (зачем изобретать велосипед?..), поэтому я и интересуюсь тем, как и где это можно сделать (получить указатель на главное окно) в классе формы? Заранее СПАСИБО! |
|||
|
||||
| Прохожий |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 12.1.2007 Репутация: 1 Всего: 1 |
Ну я тама указал и програмный способ вот в ф-и int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1), FALSE); А насчёт центрирования окна относительно экрана и вааще определения размеров относительно рабочего стола, просто никогда не занимался. Но может через GetDesktopWindow() Можно получить что. ? И ещё вот здесь http://www.firststeps.ru/ почитай тама МНОГО ОТВЕТОВ на МНОГО ВОПРОСОВ |
|||
|
||||
| GGoga |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.5.2007 Где: Харьков Репутация: нет Всего: нет |
Пробовал так, ничего не получилось :( Так что пришлось менять саму иконку, чтобы не было мелькания. Добавлено через 4 минуты и 51 секунду
Да именно так я и делал, хотя можно еще так:
А вообще все реализовал следующим образом:
|
||||||||
|
|||||||||
| Прохожий |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 12.1.2007 Репутация: 1 Всего: 1 |
Ну незнаю чем не работает смена иконки вот как здесь
Работает за всю мазуту |
|||
|
||||
| GGoga |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.5.2007 Где: Харьков Репутация: нет Всего: нет |
Да, действительно, так иконка устанавливается без проблем. Спасибо за полезный совет!
|
|||
|
||||
| Gerk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 5.10.2006 Репутация: нет Всего: нет |
Ну как еще один способ центрирования окна
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Попробуй еще переопределить функцию CFrameWnd::ActivateFrame: вроде бы она приходит до появления кона на экране, и там можно его отцентровать и т.д.
-------------------- ... |
|||
|
||||
| GGoga |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.5.2007 Где: Харьков Репутация: нет Всего: нет |
Спасибо! Знать лишний способ никогда не помешает |
|||
|
||||
| GGoga |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 1.5.2007 Где: Харьков Репутация: нет Всего: нет |
Спасибо |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |