Как сделать активным MDI окно
|
|
Alec | Дата: Среда, 19.06.2013, 10:52 | Сообщение # 1 |
Лейтенант
Группа: Друзья
Сообщений: 73
Статус: Offline
| Привет, всем. В моём проекте несколько MDI окон. За основу моего проекта я взял пример с MDI гаджетами. В целом понятно как с ними работать. Например, делать активными разные MDI окна через меню (как в примере справки по window9).
Вопрос: Можно ли делать активными MDI окна с помощью IsMouseOver() ? Т.е. пользователь моей программы поработал с одним MDI окном и переходит на работу с другим; чтобы не кликать каждый раз на другое MDI окно, чтобы его сделать активным, а чтобы оно становилось активным, если мышка над ним. "Перерыл" всю библиотеку, пробовал EventActivate и другие функции, ничего не получается.
WorldSim3D - 3D движок для FreeBasic, для PC. Мощная 3D графика и простота программирования. Ознакомиться.
|
|
| |
haav | Дата: Среда, 19.06.2013, 12:26 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| Привет! Что-то типа этого надо?
Код #Include "window9.bi" Dim As HWND mdi1,mdi2 Dim As HMENU hMessages,MenName Dim As Integer event OpenWindow("",10,10,400,400) hMessages=Create_Menu() MenName=MenuTitle(hMessages,"MDI") ClientMDIGadget(MenName,100) mdi1=MDIGadget("MDI1",10,10,200,200):WindowColor(mdi1,&h6405A3) mdi2=MDIGadget("MDI2",100,10,200,200):WindowColor(mdi2,&h498721)
Do event=WaitEvent If IsMouseOver(mdi1) And IsMouseOver(mdi2) And GetStateMenu(hMessages,100)=3 Then SetWindowPos(mdi1,HWND_TOP,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE) ElseIf IsMouseOver(mdi1) And IsMouseOver(mdi2) And GetStateMenu(hMessages,101)=3 Then SetWindowPos(mdi2,HWND_TOP,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE) ElseIf IsMouseOver(mdi1) Then SetWindowPos(mdi1,HWND_TOP,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE) ElseIf IsMouseOver(mdi2) Then SetWindowPos(mdi2,HWND_TOP,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE) EndIf If event=EventClose Then End Loop
Для динамически создаваемых окон MDI , то есть когда кол-во заранее неизвестно, лучше вынести код в функцию и отправлять туда массив или связанный список с хендлами MDI окон. И там уже в цикле делать проверки
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Среда, 19.06.2013, 12:41 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 1376
Статус: Offline
| В принципе даже можно упростить так:
Код #Include "window9.bi" Dim As HWND mdi1,mdi2 Dim As HMENU hMessages,MenName Dim As Integer event OpenWindow("",10,10,400,400) hMessages=Create_Menu() MenName=MenuTitle(hMessages,"MDI") ClientMDIGadget(MenName,100) mdi1=MDIGadget("MDI1",10,10,200,200):WindowColor(mdi1,&h6405A3) mdi2=MDIGadget("MDI2",100,10,200,200):WindowColor(mdi2,&h498721)
Do event=WaitEvent If IsMouseOver(mdi1) And GetStateMenu(hMessages,100)=3 Then 'Ничего не делаем ElseIf IsMouseOver(mdi2) And GetStateMenu(hMessages,101)=3 Then 'Ничего не делаем ElseIf IsMouseOver(mdi1) Then SetWindowPos(mdi1,HWND_TOP,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE) ElseIf IsMouseOver(mdi2) Then SetWindowPos(mdi2,HWND_TOP,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE) EndIf If event=EventClose Then End Loop
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Alec | Дата: Среда, 19.06.2013, 17:15 | Сообщение # 4 |
Лейтенант
Группа: Друзья
Сообщений: 73
Статус: Offline
| Да,всё работает. Спасибо, haav. Я бы сам не догадался, так как GetStateMenu в примере из хелпа к window9 используется только в меню.
WorldSim3D - 3D движок для FreeBasic, для PC. Мощная 3D графика и простота программирования. Ознакомиться.
|
|
| |
|