FreeBasic
Главная
Вход
Регистрация
Пятница, 19.04.2024, 13:16Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Как сделать активным MDI окно (с помощью IsMouseOver())
Как сделать активным MDI окно
AlecДата: Среда, 19.06.2013, 10:52 | Сообщение # 1
Лейтенант
Группа: Друзья
Сообщений: 73
Репутация: 1
Статус: Offline
Привет, всем.
В моём проекте несколько MDI окон.
За основу моего проекта я взял пример с MDI гаджетами. В целом понятно как с ними работать. Например, делать активными разные MDI окна через меню (как в примере справки по window9).

Вопрос:
Можно ли делать активными MDI окна с помощью IsMouseOver() ?
Т.е. пользователь моей программы поработал с одним MDI окном и переходит на работу с другим; чтобы не кликать каждый раз на другое MDI окно, чтобы его сделать активным, а чтобы оно становилось активным, если мышка над ним.
"Перерыл" всю библиотеку, пробовал EventActivate и другие функции, ничего не получается.


WorldSim3D - 3D движок для FreeBasic, для PC. Мощная 3D графика и простота программирования. Ознакомиться.
 
haavДата: Среда, 19.06.2013, 12:26 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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
Репутация: 1
Статус: Offline
Да,всё работает. Спасибо, haav. smile
Я бы сам не догадался, так как GetStateMenu в примере из хелпа к window9 используется только в меню.


WorldSim3D - 3D движок для FreeBasic, для PC. Мощная 3D графика и простота программирования. Ознакомиться.
 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Как сделать активным MDI окно (с помощью IsMouseOver())
  • Страница 1 из 1
  • 1
Поиск: