All Forums
 Категория Visio
 Форум Вопросы и ответы
 Control в отдельном окне
Author Previous Topic Topic Next Topic  

Gardener

19 Posts

Posted - 02/29/2008 :  11:01:12
Добрый день!
Рассказываю по порядку. В Visio можно вставить Control (Нпример ListBox). Но в моем документе он мне не нужен, нужен только в процессе редактирования документа. Возникла идея вставить Control в отдельное окно (тем более таких окон нужно несколько). Получается что-то похожее на stencil (но stencil в данном случае не подходит).

Window fWindow = mVisioApp.Windows.Add("Wnd",0,0,0,0,100,100,0,null,null);
Непонятно как вставить Control в окно. Нужно ли создавать документ для этого окна или еще каким-либо способом?

Gardener

19 Posts

Posted - 02/29/2008 :  12:24:15
Получается что Control можно добавить только в документ, а документ получается стандартный (типа окно для рисования).
Сделать просто окно с контролом не могу.
Go to Top of Page

Gardener

19 Posts

Posted - 02/29/2008 :  12:32:58
Вот например в UML Model Explorer.
Что-то подобное и хочется создать.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/02/2008 :  15:22:20
А почему обязательно в документ...
Control можно вставить в отдельную форму и в нужный момент эту форму вызывать. Будет окошко, высвечаваемое по событиям или по запуску макроса.
Ну а более сложный вариант - сделать так называемое Anchored Window. Оно создается как дочернее и может болтаться в любом месте либо прикрепляться к какой-то из сторон родительского окна. (Как я понимаю, это и есть что-то типа UML Model Explorer)
Если поискать в MSDN слова Anchored Window, то обязательно наткнетесь на пример создания такого окна.
Go to Top of Page

Gardener

19 Posts

Posted - 05/13/2008 :  09:03:24
Anchored Window создается, но не получается в нем создать дочерние окна. Например есть у меня форма. Я делаю SetParent, в качестве родительского указываю созданный ранее Anchored Window. Фигня какая-то получается. Окно виснет.
Если делать вариант с отдельной формой, то кто будет родителем для этой формы. Я так думаю что должно быть Visio, потому что они должны будут вместе работать. Но опять такая-же бодяга с назначением родительского окна.
Go to Top of Page

Gardener

19 Posts

Posted - 05/13/2008 :  13:56:35
Окно создается нормально.
Осталось теперь его прикрепить. С этим проблема.
Окно получается обычное, как все остальные.
Может нужно другой тип использовать , не Anchored Window ?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/13/2008 :  16:01:29
Ну вот примерчик. Может поможет...
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Public Const GWL_STYLE = (-16)
Public Const WS_CHILD = &H40000000
Public Const WS_VISIBLE = &H10000000

Public m_Base As Base

Public Sub ShowBase()

Dim wAddon As Visio.Window
Set wAddon = ActiveWindow.Windows.Add("Base", visWSVisible, visAnchorBarAddon, , , 300, 210)

Set m_Base = New Base
m_Base.Caption = "Base"

Dim FormHandle As Long
FormHandle = FindWindow(vbNullString, "Base")

SetWindowLong FormHandle, GWL_STYLE, WS_CHILD Or WS_VISIBLE

SetParent FormHandle, wAddon.WindowHandle32

Dim pnLeft As Long, pnTop As Long, pnWidth As Long, pnHeight As Long
wAddon.GetWindowRect pnLeft, pnTop, pnWidth, pnHeight
wAddon.SetWindowRect pnLeft, pnTop, pnWidth + 1, pnHeight
For Each sh In ActivePage.Shapes
m_Base.ListBox1.AddItem sh.Name
Next

End Sub
Go to Top of Page

Gardener

19 Posts

Posted - 05/14/2008 :  12:51:47
Спасибо. Заработало.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)