- 01: 名前:CHERRY投稿日:2003/04/01(火) 08:50
- Visioにて表示されるチャイルドウインドウをアドオンから
非表示にしたいと思いますが、
ウインドウオブジェクトのVisibleプロパティでFALSEを
設定することで可能でしょうか。
現状、その方法でステンシルのウインドウを非表示に
しようとしていますが、ウインドウが非表示になりません。
ウインドウオブジェクトのWindowHandle32から、
ウインドウハンドルを取得し、Win32 APIのShowWindow()を
使用した場合、ウインドウは非表示とならず、
ウインドウの中身が非表示となります。(枠が残る)
どなたか、ウインドウを非表示にする方法を
ご存知の方がおられました、ご教示いただけませんか?
- 02: 名前:なか投稿日:2003/04/01(火) 10:18
- これだとステンシルのウインドウなども表示したままではないですか?
ウインドウハンドルを取得してShowWindowでウインドウを非表示にするやり方はあってます。
但し、ウインドウオブジェクトのWindowHandle32で取得できるハンドルをそのまま使っても駄目です。
VC++のツールのSpyなどでVisioのウインドウ構造を一度確認すると分かり易いのですが、
ウインドウオブジェクトで返されるハンドルは図面のウインドウのものでチャイルドウインドウのものではありません。
具体的には、ウインドウオブジェクトで取得したハンドルをもとにWin32 APIのGetParent()を使って親ウインドウの
ウインドウハンドルを取得します。このウインドウハンドルがチャイルドウインドウのウインドウハンドルとなります。
後は、このハンドルを使ってShowWindow()を行えばチャイルドウインドウを消すことができます。
- 03: 名前:CHERRY投稿日:2003/04/24(木) 09:21
- ご返答ありがとうございます。
教えていただいた通りにGetParentを使用して、
チャイルドウインドウのハンドルを取得しました。
しかし、ShowWindowのSW_HIDEを使用しても動作的には
以前と同じように『ウインドウのみが残る』状態のままです。。
ためしに他のフラグを試したところ、SW_SHOWMINNOACTIVE
は正しく動作しているみたいですが、SW_HIDEでは
チャイルドウインドウが非表示状態になりません。。。
- 04: 名前:なか投稿日:2003/04/24(木) 09:40
- あれ、私はできましたけど
一応サンプルコード載せときます。
Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Sub ShowWindowMacro()
Dim win As Visio.Window
Set win = Visio.Application.ActiveWindow
hwnd = win.WindowHandle32
hwnd = GetParent(hwnd)
Call ShowWindow(hwnd, 5)
End Sub
Sub HideWindowMacro()
Dim win As Visio.Window
Set win = Visio.Application.ActiveWindow
hwnd = win.WindowHandle32
hwnd = GetParent(hwnd)
Call ShowWindow(hwnd, 0)
End Sub
- 05: 名前:CHERRY投稿日:2003/05/13(火) 22:02
- こちらで現象から調べたところ、Visioのフローティングウインドウは3つの
状態があるようで、そのうち1つの状態になった時のみ、ShowWindow()で
非表示にできるようです。
3つの状態は以下の通りです。
@フレームに完全にドッキングしている状態
Aフレームから離れて、完全にフローティングしている状態
Bフレームに上/下/左/右のどれかが面して、”接している”状態
このうち、Bの時のみShowWindowで非表示にすることが出来ました。
その他の場合は、非表示にしたチャイルドウインドウのフレームのみ
が残ってしまう状態です。
なかさんが上記のサンプルで試された時、
チャイルドウインドウはどの状態でしたでしょうか?
(わかりにくい説明で申し訳ありませんが、
上記説明でご理解いただければ、ご教示いただけませんか。)
- 06: 名前:CHERRY投稿日:2003/05/13(火) 22:21
- ヘルプを見たところ、上記の状態は
@固定ウインドウ/A浮動表示ウインドウ/Bアンカーウインドウ
というらしいことがわかりました。
- 07: 名前:なか投稿日:2003/05/14(水) 09:24
- どのウインドウ状態でもできますけど
ひょっとしてVisioバージョンによってできなかったりするのかな?
ちなみに私はVisio2002です。
それから、Visio図面ファイルのウインドウ以外(マスタシェイプの編集ウインドウ等)
だと上記のやり方では駄目だと思います。
- 08: 名前:CHERRY投稿日:2003/05/14(水) 11:59
- 私はVisio2002(SPなし)を使用しています。
開発環境はVC6で、使用言語はC++です。
非表示にする対象のチャイルドウウインドウは図面ファイル以外全て
(アドオンから作成したウインドウ、ステンシルウインドウ等)です。
一度、教えていただいたサンプルをVBAで試して、
もしうまくいけばアドオンからそのVBA側のメソッドを呼び出そうかと
考えています。
なかさんはうまくいっているので、私のコーディングミスの可能性
がありますので、まずは確認してみます。
■トップに戻る リロード 単独スレ表示
|