Author |
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 можно добавить только в документ, а документ получается стандартный (типа окно для рисования). Сделать просто окно с контролом не могу.
|
|
|
Gardener
19 Posts |
Posted - 02/29/2008 : 12:32:58
|
Вот например в UML Model Explorer. Что-то подобное и хочется создать. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 03/02/2008 : 15:22:20
|
А почему обязательно в документ... Control можно вставить в отдельную форму и в нужный момент эту форму вызывать. Будет окошко, высвечаваемое по событиям или по запуску макроса. Ну а более сложный вариант - сделать так называемое Anchored Window. Оно создается как дочернее и может болтаться в любом месте либо прикрепляться к какой-то из сторон родительского окна. (Как я понимаю, это и есть что-то типа UML Model Explorer) Если поискать в MSDN слова Anchored Window, то обязательно наткнетесь на пример создания такого окна. |
|
|
Gardener
19 Posts |
Posted - 05/13/2008 : 09:03:24
|
Anchored Window создается, но не получается в нем создать дочерние окна. Например есть у меня форма. Я делаю SetParent, в качестве родительского указываю созданный ранее Anchored Window. Фигня какая-то получается. Окно виснет. Если делать вариант с отдельной формой, то кто будет родителем для этой формы. Я так думаю что должно быть Visio, потому что они должны будут вместе работать. Но опять такая-же бодяга с назначением родительского окна.
|
|
|
Gardener
19 Posts |
Posted - 05/13/2008 : 13:56:35
|
Окно создается нормально. Осталось теперь его прикрепить. С этим проблема. Окно получается обычное, как все остальные. Может нужно другой тип использовать , не Anchored Window ? |
|
|
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 |
|
|
Gardener
19 Posts |
Posted - 05/14/2008 : 12:51:47
|
Спасибо. Заработало. |
|
|
|
Topic |
|
|
|