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

mers

Russia
159 Posts

Posted - 01/24/2005 :  14:43:31
Здравствуйте.

На основе Visio пишется приложение на с#
используются ее ActivX компоненты, например, Drowing Control.
В Visio, как и в других офисных программах, частью оформления являются панели инструментов, которые можно претаскивать, включать, выключать и др.

Может кто подскажет КАК это сделать?
классы которые отвечают за эти панельки?

нашел в MSDN как подключать конкретные кнопки, т.е. одну конкретную кнопочку Visio на своей панели я могу сделать, но как "вытащить" всю панельку.

сразу оговорюсь, что в SDK и MSDN я уже посмотрел, поэтому если ссылаетесь на эти ресурсы, то указывайте, пожалуйста, полную ссылочку.

заранее спасибо.

С уважением, Владимир.

mers

Russia
159 Posts

Posted - 01/24/2005 :  17:45:08
вот что говорят в MSDN по этому поводу:
quote:
Integrating Menus and Toolbars

The best practice when building an application using the Visio drawing control is to implement a custom UI. If you want to display Visio menus and toolbars in your container application, set the drawing control's NegotatiateToolbars and NegotiateMenus properties. The following C# code enables both menu and toolbar merging:

drawingControl.NegotiateMenus = True;
drawingControl.NegotiateToolbars = True;

The best practice is to set both of these properties to the same value. The control will not support independent negotiation of toolbars and menus.

The container application must support OLE menu merging in order to display Visio menus or toolbars. For example, you can enable toolbar merging in a Word document. Within the Visual Basic project of the Word document you can programmatically display Visio toolbars. The following example displays the Layout & Routing toolbar.

vsoApplication.CommandBars("Layout & Routing").Visible = True

Important Do not attempt menu and toolbar merging with multiple active instances of the ActiveX control. Multiple instances of the control share a single underlying Visio Application object. You may get unexpected results when trying to do menu merging with a single Application object and multiple active instances of the control.
Important Do not merge menus and toolbars with the Internet Explorer user interface. There are known issues with menu merging in Internet Explorer (see the Microsoft Knowledge Base article 193098, PRB: Unexpected Menu Merging Behavior in Internet Explorer).

Menu and Toolbar Integration for Non-OLE Menu Merging Hosts
If your container does not support OLE menu merging (for example, a Windows Form), you can use the IOleCommandTarget interface to run Visio commands. You can implement your own menu item or toolbar button as demonstrated by the following C# example:

using System.Runtime.InteropServices;
using System;

namespace OleCommandTarget
{
    [StructLayout(LayoutKind.Sequential)]
    public struct OLECMDTEXT
    {
        public UInt32 cmdtextf;
        public UInt32 cwActual;
        public UInt32 cwBuf;
        public char rgwz;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct OLECMD
    {
        public UInt32 cmdID;
        public UInt64 cmdf;
    }

    [ComImport(), Guid("B722BCCB-4E68-101B-A2BC-00AA00404770"),
        InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IOleCommandTarget
    {
        [PreserveSig()]
        int QueryStatus( [In, MarshalAs(UnmanagedType.Struct)] ref Guid 
            pguidCmdGroup, [MarshalAs(UnmanagedType.U4)] int cCmds, 
            [In, Out] IntPtr prgCmds, [In, Out] IntPtr pCmdText);

        [PreserveSig()]
        int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdExecOpt, 
            object[] pvaIn, [In, Out, MarshalAs(UnmanagedType.LPArray)] 
            object[] pvaOut);
    }
}

After you have created your menu item, use your IOleCommandTarget interface to apply the appropriate Visio user interface command for that target. The following example enables the Connector tool when a menu item is clicked:

using OleCommandTarget;

private void menuItem_Click(object sender, System.EventArgs eventData)
{
    SendCommand();
}

private void SendCommand()
{
    const UInt32 VISCMD_DRCONNECTORTOOL = 
         (UInt32)Visio.VisUICmds.visCmdDRConnectorTool;
    IOleCommandTarget commandTarget = 
         (IOleCommandTarget)axDrawingControl1.GetOcx();

    try
    {
        Guid CLSID_Application = new Guid("{0x00021A20, 0x0000, 0x0000, 
            {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}");
        commandTarget.Exec(ref CLSID_Application, VISCMD_DRCONNECTORTOOL, 
            0, null, null);
    }
    catch(System.Runtime.InteropServices.COMException ex)
    {
        MessageBox.Show(ex.ToString());
    }
}



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)