| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > MDI приложение |
| Автор: vinter 17.8.2006, 13:58 | ||
Создал каркас обычным визардом, там есть такая ф-ия создания дочерних окон:
Вопрос как мне получить HWND нового child'a |
| Автор: Earnest 17.8.2006, 16:52 |
| Так CreateNewChild его тебе и вернет, т.е. возвращается CMDIChildWnd*, но у окна получить дескриптор просто: m_hWnd. |
| Автор: vinter 17.8.2006, 18:28 | ||
т.е
я правильно понял? И еще у меня появился вопрос в MDI при создании дочерних окон появляется меню Window и с ним можно работать, но когда удалть все дочерние окна, а потом снова начать их создавать то Window становится неактивным..Кто нибудь может сталкивлся с этим?? |
| Автор: Earnest 18.8.2006, 11:37 | ||||
Можно и так. Но вообще-то стоит знать, что член m_hWnd является открытым, и есть еще оператор преобразования, к-й возвращает HWND. Т.е. можно писать еще так:
Со вторым - не сталкивалась. |
| Автор: vinter 18.8.2006, 12:10 |
| спасибо |
| Автор: vinter 18.8.2006, 13:18 |
| Еще такая проблема, ставлю в PreCreateWindow() cs.lpszName = "Лошадь";, ноль эмоций, ставит имя которое у него в ресурсах... Подскажите как исправить... |
| Автор: Earnest 18.8.2006, 15:01 |
| Поправь имя в ресурсах. Долго объяснять, но сначала ставиться твое "лошадь", а потом фрейморк меняет его на имя из ресурсов. Посмотреть можно код функции UpdateFrameTitle (вроде так) и вокруг. |
| Автор: vinter 18.8.2006, 18:07 | ||||
так то понятно но я хочу ,чтобы при создании нового окна у него было уникальное имя, а не у всех одинаковое..
Это можно обойти/заблочить?? |
| Автор: Earnest 21.8.2006, 13:12 |
| Можно, если пороешься в исходных текстах MFC: там много всяких виртуальных ручек. Но сначала подумай, может стандартными средствами обойдешься. Обычно, имя окна == имя документа + некоторый стандартный текст. Тебя не устраивает имя документа? Тогда ищи функцию CFrameWnd::OnUpdateFrameTitle и смотри от нее, что можно изменить. |
| Автор: vinter 21.8.2006, 13:16 |
| Спасибо за подсказку! |
| Автор: vinter 24.8.2006, 20:19 | ||||
| появился новый вопрос.. при создании дочернего окна, его клентская часть создается так:
m_wndView обьект класса CChildView обьявленный в CСhildFrame... Фрейм создается вот так
теперь вопрос как мне в функции класса CMainFrame получит hWnd, этого окна?? |
| Автор: Earnest 25.8.2006, 07:37 |
| Какого окна? ChildFrm? Имеешь в виду, в других функциях? Ну, например, есть функция CMDIFrameWnd::MDIGetActive(). |
| Автор: vinter 25.8.2006, 14:57 | ||
| Earnest огромное тебе спасибо, с этим хоть разобрался.. Появился еще один вопрос, есть такая ф-ия
все вроде правильно, а курсор не меняет..Почему такое может происходить |
| Автор: Earnest 25.8.2006, 18:07 |
| Я не уверена, что изменение курсора в классе окна как-то влияет на уже созданное окно... Что ты вообще хочешь сделать? Менять курсор в зависимости от нажатой кнопки? Так это делается по-другому: 1) все возможные курсоры загрузи заранее 2) заведи переменную HCURSOR (или индекс текущего курсора) и присваивай ее на OnToolBar 3) обрабатывай в окне OnSetCursor (ставь свой курсор, в смысле SetCursor) |
| Автор: vinter 25.8.2006, 20:05 | ||
100% влияет.. Вот только у меня два новых вопроса появилось, я понял почему не меняется курсор, так как я меняю его не в клиентской части окна. Вопрос как получит hWnd клиентской части. И второй вопрос при изменении курсора фрейма ,изменится ли он при выведении курсора в область фрейма. Спасибо за внимание. |
| Автор: Earnest 28.8.2006, 11:22 |
Ну тогда в чем дело? hWnd у окна одно, т.е. собственно, это и есть окно. А какая там от него часть тебе требуется - твои проблемы. Второй вопрос не совсем поняла, но курсор оперделяется самым активным верхним окном, над которым он болтается. Т.е. если в фрейме есть вид, то видом. |
| Автор: vinter 28.8.2006, 17:58 | ||||
это то понятно , только у меня то дочернее окно состоит из двух частей.. и клиентская часть это отдельное окно со своим hWnd
дело было как раз в том что я пытался установить курсор в окно у которого нет стиля CLIENTEDGE(вроде правильно написал Сделал одно полноценное окно, без всяких приколов с клиентской частью в виде отдельного окна, и теперь все нормально работает Так что тема закрыта. Earnest Еще раз спасибо |