Для tan'а Topic is solved
Для tan'а
tan,
Я воспроизвел проблему описанную в ссылке.
Баг зафайлан, но к сожалению еще не был рассмотрен.
Я демаю что там что-то связанное с позиционированием, но почему-то добавление метода OnSize в класс MyCanvas проблему не решило (я говорю про sample). Думаю так потому что в моей программе симптомы связанны именно с этим.
Если захотите (заинтересуетесь) могу скинуть ссылку на баг...
Спасибо.
Я воспроизвел проблему описанную в ссылке.
Баг зафайлан, но к сожалению еще не был рассмотрен.
Я демаю что там что-то связанное с позиционированием, но почему-то добавление метода OnSize в класс MyCanvas проблему не решило (я говорю про sample). Думаю так потому что в моей программе симптомы связанны именно с этим.
Если захотите (заинтересуетесь) могу скинуть ссылку на баг...
Спасибо.
-
- wxWorld Domination!
- Posts: 1471
- Joined: Tue Nov 14, 2006 7:58 am
- Location: Saint-Petersburg, Russia
Re: Для tan'а
Привет.ONEEYEMAN wrote:tan,
Я воспроизвел проблему описанную в ссылке.
Баг зафайлан, но к сожалению еще не был рассмотрен.
Я демаю что там что-то связанное с позиционированием, но почему-то добавление метода OnSize в класс MyCanvas проблему не решило (я говорю про sample). Думаю так потому что в моей программе симптомы связанны именно с этим.
Если захотите (заинтересуетесь) могу скинуть ссылку на баг...
Спасибо.
Я посмотрел пример, только я не совсем понял, как это связано с проблемой, описанной в http://forums.wxwidgets.org/viewtopic.php?p=79881#79881. Там вроде речь шла о проблемах с DLL.
Ну а для этого бага есть простой workaround - просто вызывай Maximize() после Show():
Code: Select all
...
//// Associate the menu bar with the frame
frame->SetMenuBar(menu_bar);
frame->Centre(wxBOTH);
// frame->Maximize();
#ifndef __WXMAC__
frame->Show(true);
#endif //ndef __WXMAC__
SetTopWindow(frame);
frame->Maximize();
return true;
}
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
tan,
Все очень просто. Если я воспроизведу проблему в одном из самплов, то смогу просто спросить либо на форуме либо в рассылке про обходной путь.
Что касается вызова Maximize() после Show(), то это работает.
Но к сожалению (или к счастью) я воспроизвел проблему которая имеет место быть в моем приложении.
Please see an attachment.
Прокомпилировать, запустить, выбрать "File"->"New"->"Drawing", "OK".
Child frame окно смещено вниз, а окно toolbar2 не прорисовано. Если провести над toolbar'ом2 мышью, ничего не произойдет. Если поднять окно child frame то окно toolbar2 исчезнет, как будто его и не было.
Сообщение OnSize для главного окна приложения обрабатывается.
Спасибо.
Все очень просто. Если я воспроизведу проблему в одном из самплов, то смогу просто спросить либо на форуме либо в рассылке про обходной путь.
Что касается вызова Maximize() после Show(), то это работает.
Но к сожалению (или к счастью) я воспроизвел проблему которая имеет место быть в моем приложении.
Please see an attachment.
Прокомпилировать, запустить, выбрать "File"->"New"->"Drawing", "OK".
Child frame окно смещено вниз, а окно toolbar2 не прорисовано. Если провести над toolbar'ом2 мышью, ничего не произойдет. Если поднять окно child frame то окно toolbar2 исчезнет, как будто его и не было.
Сообщение OnSize для главного окна приложения обрабатывается.
Спасибо.
- Attachments
-
- docvwmdi.rar
- (91.4 KiB) Downloaded 176 times
-
- wxWorld Domination!
- Posts: 1471
- Joined: Tue Nov 14, 2006 7:58 am
- Location: Saint-Petersburg, Russia
Привет.
Ну я здесь не вижу проблем с самой WX. Просто ты как-то криво все это сделал
Я слегка поправил два файлика из твоего примера, вроде работает как ожидалось. Попробуй, может я чего-то не понял (в смысле что ты хотел сделать и это не помогает в твоем случае), но так, на первый взгляд, все выглядит адекватно.
Ну я здесь не вижу проблем с самой WX. Просто ты как-то криво все это сделал
Я слегка поправил два файлика из твоего примера, вроде работает как ожидалось. Попробуй, может я чего-то не понял (в смысле что ты хотел сделать и это не помогает в твоем случае), но так, на первый взгляд, все выглядит адекватно.
- Attachments
-
- docvwmdi.zip
- (5.11 KiB) Downloaded 182 times
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
Все работает в примере, спасибо.
2 вопроса.
1. В чем разница между использованием переменной frame и вызовом функции GetClientWindow()? И можно ли использовать функцию GetActiveChild() (точно название не помню, получить активное окошко mdi child)?
2. Куда подевалась нижняя граница окна mdi child?
Веонусь с работы, попробую в своей программе....
2 вопроса.
1. В чем разница между использованием переменной frame и вызовом функции GetClientWindow()? И можно ли использовать функцию GetActiveChild() (точно название не помню, получить активное окошко mdi child)?
2. Куда подевалась нижняя граница окна mdi child?
Веонусь с работы, попробую в своей программе....
-
- wxWorld Domination!
- Posts: 1471
- Joined: Tue Nov 14, 2006 7:58 am
- Location: Saint-Petersburg, Russia
GetClientWindow() возвращает wxMDIClientWindow окно, в нем как раз и размещаются все дочерние фреймы (wxMDIChildFrame). По нормальному, wxMDIClientWindow окно занимает всю слиент область главного фрейма, если мы хотим занять некоторую часть клиент области под свои нужды (как в твоем примере, под второй тулбар), то надо соответствующим образом "сдвинуть" wxMDIClientWindow окно. При этом нет нужды заботиться о расположении дочерних фреймов, поскольку их реальным парентом wxMDIClientWindow и является.ONEEYEMAN wrote:Все работает в примере, спасибо.
2 вопроса.
1. В чем разница между использованием переменной frame и вызовом функции GetClientWindow()?
Ну конечно, именно это и надо юзатьONEEYEMAN wrote: И можно ли использовать функцию GetActiveChild() (точно название не помню, получить активное окошко mdi child)?
Да вроде она никуда и не девалась Хотя да, просто я не устанавливаю его размера явно, ну он и остается по умолчанию, т.е. больше, чем оставшаяся клиентская область. Ну это вроде не проблема. Просто надо его размер тоже уменьшить (или просто мышкой сузить).ONEEYEMAN wrote: 2. Куда подевалась нижняя граница окна mdi child?
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
tan,
Даже в моей программе это работает... Спасибо.
Ну и наконец последнее.
Где устанавливать размер mdi child окна, так чтобы нижняя граница этого окна была видна.
В документации написано что wxMDIClientWindow не требует наследования.
Устанавливать ее в MainFrame::OnSize()? Насколько я понял размер этого окна нужно устанавливать по размерам wxMDIClientWindow, а не MainFrame. Или все - таки устанавливать эти размеры по размерам клиентской части MainFrame?
Спасибо.
Даже в моей программе это работает... Спасибо.
Ну и наконец последнее.
Где устанавливать размер mdi child окна, так чтобы нижняя граница этого окна была видна.
В документации написано что wxMDIClientWindow не требует наследования.
Устанавливать ее в MainFrame::OnSize()? Насколько я понял размер этого окна нужно устанавливать по размерам wxMDIClientWindow, а не MainFrame. Или все - таки устанавливать эти размеры по размерам клиентской части MainFrame?
Спасибо.
-
- wxWorld Domination!
- Posts: 1471
- Joined: Tue Nov 14, 2006 7:58 am
- Location: Saint-Petersburg, Russia
В таком виде у меня работает (см. аттач).
Хотя, что-то у них все равно не так работает, как я ожидал Поэтому требуется некоторый трюк (см. коммент в файле). Судя по сорцам, при затребовании парента от wxMDIChildFrame возвращается wxMDIParentFrame, хотя реально парент есть wxMDIClientWindow (это явно видно, если глянуть Spy++). Т.е. координаты дочернего окна пересчитывются относительно клиент области парент фрейма. При этом явного метода установить положение клиентской области окна (типа wxWindow::SetClientAreaOrigin()) в природе не существует.
Может, конечно, это я чего-то не понимаю Я, вообще-то, архитектуру MDI в своих проектах не юзаю, поэтому особо тщательно и не разбирался.
Хотя, что-то у них все равно не так работает, как я ожидал Поэтому требуется некоторый трюк (см. коммент в файле). Судя по сорцам, при затребовании парента от wxMDIChildFrame возвращается wxMDIParentFrame, хотя реально парент есть wxMDIClientWindow (это явно видно, если глянуть Spy++). Т.е. координаты дочернего окна пересчитывются относительно клиент области парент фрейма. При этом явного метода установить положение клиентской области окна (типа wxWindow::SetClientAreaOrigin()) в природе не существует.
Может, конечно, это я чего-то не понимаю Я, вообще-то, архитектуру MDI в своих проектах не юзаю, поэтому особо тщательно и не разбирался.
- Attachments
-
- view.zip
- (2.62 KiB) Downloaded 172 times
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
tan,
А как насчет этой программки?
А как насчет этой программки?
- Attachments
-
- docvwmdi.rar
- тулбар вертикальный
- (96.04 KiB) Downloaded 182 times