205 lines
26 KiB
HTML
205 lines
26 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<title>Get Menu Command Items Example (C#)</title>
|
|
<meta http-equiv="Content-Language" content="en-us">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
|
|
<link rel="stylesheet" type="text/css" href="ApiHelp.css">
|
|
<style type="text/css">
|
|
.auto-style1 {
|
|
font-size: x-small;
|
|
}
|
|
.auto-style2 {
|
|
color: #2B91AF;
|
|
}
|
|
</style>
|
|
</head>
|
|
<meta name=MS-HKWD content="C# examples,menus">
|
|
<meta name=MS-HKWD content="C# examples,add-ins">
|
|
|
|
<body>
|
|
<h1><font size="1"><span style="font-weight: 400">SOLIDWORKS PDM Professional API Help</span></h1>
|
|
<h1>Get Menu Command Items Example (C#)</h1>
|
|
<p><a name="Top"></a>This example shows how to get add-in menu command items.</p>
|
|
<p><b>NOTE</b>: If using the primary interop assembly
|
|
provided with SOLIDWORKS PDM Professional, see
|
|
<a href="Using_NET_Framework_in_Applications.htm">Using .NET Framework 4.0 in
|
|
Stand-alone Applications</a>.</p>
|
|
<p><img border="0" src="AddinMenuItems.gif" width="189" height="201"></p>
|
|
|
|
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
|
<span style="color: #008000">//</span><span style="color:green;">--------------------------------------------------------------------------------------</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> Preconditions:</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> 1. Start Microsoft Visual Studio.</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> a. Click <b>File > New > Project > Visual C# > Console Application</b>.</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> b. Type <b>MenuCSharp</b> in <b>Name</b>.</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> c. Click <b>Browse</b> and navigate to the folder where to create the project. </span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> d. Click <b>OK</b>.</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> e. Replace the code in <b>Program.cs</b> with <a href="#Module1">this code</a>.</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> 2. Add <b>EPDM.Interop.epdm.dll</b> as a reference (right-click the project</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> name in the Solution Explorer, click <b>Add Reference</b>, click </span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> <b>Assemblies > Framework</b> in the left-side panel, browse to the top folder of </span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> your SOLIDWORKS PDM Professional installation, locate and click </span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> <b>EPDM.Interop.epdm.dll</b>, click <b>Open</b>, and click <b>Add</b>).<br>
|
|
// 3. Add <b>System.Windows.Forms</b> as a reference (click <b>System.Windows.Forms<br>
|
|
</b>// in the Name column, click <b>Add</b>, and click <b>Close</b>).</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> 4. Right-click <b>EPDM.Interop.epdm</b> in <b>References</b>, click <b>Properties</b>, and set </span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> <b>Embed Interop Types</b> to <b>False</b> to handle methods that pass arrays of </span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> structures.<br>
|
|
// 5. Replace <i>ACME_LAB</i> with the name of a valid vault view.</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"> 6. Click <b>Debug > Start Debugging</b> or press F5.</span><br>
|
|
<span style="color: #008000">//</span><span style="color:green;"><br>
|
|
// Postconditions: </span><br>
|
|
<span style="color: #008000">//</span><span style="color: green"> 1. Displays the command window.<br>
|
|
// 2. Displays a message box for each add-in menu command item. <br>
|
|
// 3. Click <b>OK</b> to close each message box.</span><br>
|
|
<span style="color: #008000">//</span><span style="color: green"> 4. Displays the menu in the upper-left corner of the desktop.</span><br>
|
|
<span style="color: #008000">//</span><span style="color: green"> 5. Click <b>First Command</b> in the menu.</span><br>
|
|
<span style="color: #008000">//</span><span style="color: green"> 6. Click <b>OK</b> to close the message box.</span><br>
|
|
<span style="color: #008000">//</span><span style="color: green"> 7. Click the command window and press any key.</span><br>
|
|
<span style="color: #008000">//</span><span style="color: green"> 8. Closes the command window and exits the application.</span><br>
|
|
<span style="color: #008000">//</span><span style="color: green">--------------------------------------------------------------------------------------</span></p>
|
|
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE"><span style="color: #008000"><a name="Module1"></a>
|
|
//Program.cs</span><br>
|
|
</p>
|
|
|
|
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
|
<span style="color:blue;">using</span> System;<br>
|
|
<span style="color:blue;">using</span> System.Collections.Generic;<br>
|
|
<span style="color:blue;">using</span> System.Linq;<br>
|
|
<span style="color:blue;">using</span> System.Text;<br>
|
|
<span style="color:blue;">using</span> System.Windows.Forms;<br>
|
|
<span style="color:blue;">using</span> System.Runtime.InteropServices;<br>
|
|
<span style="color:blue;">using</span> EPDM.Interop.epdm;<br>
|
|
<br>
|
|
<br>
|
|
<span style="color:blue;">namespace</span> MenuCSharp<br>
|
|
{<br>
|
|
<span style="color:blue;">class</span> <span style="color:#2b91af;">Program</span><br>
|
|
{<br>
|
|
<span style="color:blue;">static</span> <span style="color:#2b91af;">EdmVault5</span> vault;<br>
|
|
<br>
|
|
<span style="color:blue;">static</span> <span style="color:#2b91af;">Form</span> frmParent;<br>
|
|
<span style="color:blue;">static</span> <span style="color:blue;">void</span> Main(<span style="color:blue;">string</span>[] args)<br>
|
|
{<br>
|
|
<span style="color:blue;">try</span><br>
|
|
{<br>
|
|
<span style="color:green;">//Create a vault interface</span><br>
|
|
vault = <span style="color:blue;">new</span> <span style="color:#2b91af;">EdmVault5</span>();<br>
|
|
<br>
|
|
<span style="color:green;">//Log into vault</span><br>
|
|
vault.<b>LoginAuto</b>(<span style="color:#a31515;">"<i>ACME_LAB</i>"</span>, 0);<br>
|
|
<br>
|
|
<span style="color:green;">//Show menu</span><br>
|
|
ShowMenu((<span style="color:#2b91af;">IEdmVault12</span>)vault);<br>
|
|
<br>
|
|
}<br>
|
|
<span style="color:blue;">catch</span> (System.Runtime.InteropServices.<span style="color:#2b91af;">COMException</span> ex)<br>
|
|
{<br>
|
|
<font size="1"><span class="auto-style2">MessageBox</span>.Show</font>(<span style="color:#a31515;">"HRESULT = 0x"</span> + ex.ErrorCode.ToString(<span style="color:#a31515;">"X"</span>) + <span style="color:#a31515;">" "</span> + ex.Message);<br>
|
|
}<br>
|
|
<span style="color:blue;">catch</span> (<span style="color:#2b91af;">Exception</span> ex)<br>
|
|
{<br>
|
|
<span class="auto-style2">MessageBox</span>.Show(ex.Message);<br>
|
|
}<br>
|
|
<br>
|
|
<span style="color:#2b91af;">Console</span>.WriteLine();<br>
|
|
<span style="color:#2b91af;">Console</span>.WriteLine(<span style="color:#a31515;">"Press any key to exit."</span>);<br>
|
|
<span style="color:#2b91af;">Console</span>.ReadKey();<br>
|
|
}<br>
|
|
<span style="color:blue;">private</span> <span style="color:blue;">static</span> <span style="color:blue;">void</span> ShowMenu(<span style="color:#2b91af;">IEdmVault12</span> vault)<br>
|
|
{<br>
|
|
<span style="color:green;">//Create a context-sensitive menu </span><br>
|
|
<span style="color:green;">//using Windows InsertMenu function</span><br>
|
|
System.Windows.Forms.<span style="color:#2b91af;">ContextMenu</span> mnu = <span style="color:blue;">default</span>(System.Windows.Forms.<span style="color:#2b91af;">ContextMenu</span>);<br>
|
|
mnu = <span style="color:blue;">new</span> System.Windows.Forms.<span style="color:#2b91af;">ContextMenu</span>();<br>
|
|
<br>
|
|
InsertMenu((<span style="color:#2b91af;">IntPtr</span>)mnu.Handle, 0, 0, (<span style="color:#2b91af;">IntPtr</span>)100, <span style="color:#a31515;">"First Command"</span>);<br>
|
|
InsertMenu((<span style="color:#2b91af;">IntPtr</span>)mnu.Handle, 0, 0, (<span style="color:#2b91af;">IntPtr</span>)101, <span style="color:#a31515;">"Second Command"</span>);<br>
|
|
InsertMenu((<span style="color:#2b91af;">IntPtr</span>)mnu.Handle, 0, 0, (<span style="color:#2b91af;">IntPtr</span>)102, <span style="color:#a31515;">"Third Command"</span>);<br>
|
|
<br>
|
|
<span style="color:green;">//Create a selection list with all files in the root folder</span><br>
|
|
<span style="color:#2b91af;">IEdmSelectionList5</span> selList = <span style="color:blue;">default</span>(<span style="color:#2b91af;">IEdmSelectionList5</span>);<br>
|
|
selList = <span style="color:blue;">new</span> <span style="color:#2b91af;">EdmSelectionList5</span>();<br>
|
|
<br>
|
|
<span style="color:#2b91af;">IEdmFolder6</span> folder = <span style="color:blue;">default</span>(<span style="color:#2b91af;">IEdmFolder6</span>);<br>
|
|
folder = (<span style="color:#2b91af;">IEdmFolder6</span>)vault.<b>RootFolder</b>;<br>
|
|
<span style="color:#2b91af;">IEdmPos5</span> pos = <span style="color:blue;">default</span>(<span style="color:#2b91af;">IEdmPos5</span>);<br>
|
|
pos = folder.<b>GetFirstFilePosition</b>();<br>
|
|
<span style="color:blue;">while</span> (!pos.<b>IsNull</b>)<br>
|
|
{<br>
|
|
<span style="color:#2b91af;">IEdmFile8</span> file = <span style="color:blue;">default</span>(<span style="color:#2b91af;">IEdmFile8</span>);<br>
|
|
file = (<span style="color:#2b91af;">IEdmFile8</span>)folder.<b>GetNextFile</b>(pos);<br>
|
|
<span style="color:#2b91af;">EdmSelectionObject</span> obj = <span style="color:blue;">default</span>(<span style="color:#2b91af;">EdmSelectionObject</span>);<br>
|
|
obj.<b>mbsPath</b> = file.<b>GetLocalPath</b>(folder.<b>ID</b>);<br>
|
|
obj.<b>meType</b> = file.<b>ObjectType</b>;<br>
|
|
obj.<b>mlID</b> = file.<b>ID</b>;<br>
|
|
obj.<b>mlProjectID</b> = folder.<b>ID</b>;<br>
|
|
((<span style="color:#2b91af;">IEdmSelectionList6</span>)selList).<b>AddTail2</b>(obj);<br>
|
|
}<br>
|
|
<br>
|
|
<span style="color:green;">//Add menu items for registered add-ins </span><br>
|
|
<span style="color:blue;">int</span> count = 0;<br>
|
|
count = 0;<br>
|
|
<span style="color:blue;">int</span> startID = 0;<br>
|
|
startID = 200;<br>
|
|
<span style="color:#2b91af;">IEdmMenu7</span> menuCallback = <span style="color:blue;">default</span>(<span style="color:#2b91af;">IEdmMenu7</span>);<br>
|
|
<span style="color:#2b91af;">EdmCmdInfo</span>[] ppoRetItems = <span style="color:blue;">null</span>;<br>
|
|
menuCallback = vault.<b>CreatePluginMenu2</b>(mnu.Handle.ToInt32(), 3, <span style="color:blue;">ref</span> startID, (<span style="color:#2b91af;">IEdmSelectionList6</span>)selList, (<span style="color:blue;">int</span>)<span style="color:#2b91af;">CreateMenuFlags</span>.Cmf_ContextMenu, <span style="color:blue;">out</span> count);<br>
|
|
menuCallback.<b>GetItems</b>((<span style="color:blue;">int</span>)<span style="color:#2b91af;">EdmMenuFlags</span>.EdmMenu_Nothing, <span style="color:blue;">out</span> ppoRetItems);<br>
|
|
<br>
|
|
<span style="color:blue;">string</span> str = <span style="color:blue;">null</span>;<br>
|
|
<span style="color:blue;">foreach</span> (<span style="color:#2b91af;">EdmCmdInfo</span> item <span style="color:blue;">in</span> ppoRetItems)<br>
|
|
{<br>
|
|
str = <span style="color:#a31515;">"Add-in menu command item: "</span> + "\r\n";<br>
|
|
str = str + <span style="color:#a31515;">"Command ID: "</span> + item.<b>mlCmdID</b> + <span class="auto-style1">"\r\n"</span>;<br>
|
|
str = str + <span style="color:#a31515;">"Command string: "</span> + item.<b>mbsCmdStr</b> + <span class="auto-style1">"\r\n"</span>;<br>
|
|
str = str + <span style="color:#a31515;">"Tooltip: "</span> + item.<b>mbsTooltip</b> + <span class="auto-style1">"\r\n"</span>;<br>
|
|
str = str + <span style="color:#a31515;">"Status bar help: "</span> + item.<b>mbsStatusBarHelp</b> + <span class="auto-style1">"\r\n"</span>;<br>
|
|
str = str + <span style="color:#a31515;">"EdmMenuFlags: "</span> + item.<b>mlEdmMenuFlags</b>;<br>
|
|
<span class="auto-style1">MessageBox.Show(str)</span>;<br>
|
|
}<br>
|
|
<br>
|
|
<span style="color:green;">//Display the menu using Windows TrackPopupMenu function</span><br>
|
|
<span style="color:blue;">int</span> TPM_RETURNCMD = 0;<br>
|
|
TPM_RETURNCMD = 256;<br>
|
|
<span style="color:blue;">int</span> cmdID = 0;<br>
|
|
frmParent = <span style="color:blue;">new</span> <span style="color:#2b91af;">Form</span>();<br>
|
|
cmdID = TrackPopupMenu((<span style="color:#2b91af;">IntPtr</span>)mnu.Handle, TPM_RETURNCMD, frmParent.Left, frmParent.Top, 0, (<span style="color:#2b91af;">IntPtr</span>)frmParent.Handle, (<span style="color:#2b91af;">IntPtr</span>)0);<br>
|
|
<br>
|
|
<span style="color:green;">//Run the selected command</span><br>
|
|
<span style="color:blue;">switch</span> (cmdID)<br>
|
|
{<br>
|
|
<span style="color:blue;">case</span> 100:<br>
|
|
<span class="auto-style1">MessageBox.Show</span>(<span style="color:#a31515;">"First command"</span>);<br>
|
|
<span style="color:blue;">break</span>;<br>
|
|
<span style="color:blue;">case</span> 101:<br>
|
|
<span class="auto-style1">MessageBox.Show</span>(<span style="color:#a31515;">"Second command"</span>);<br>
|
|
<span style="color:blue;">break</span>;<br>
|
|
<span style="color:blue;">case</span> 102:<br>
|
|
<span class="auto-style1">MessageBox.Show</span>(<span style="color:#a31515;">"Third command"</span>);<br>
|
|
<span style="color:blue;">break</span>;<br>
|
|
<span style="color:blue;">default</span>:<br>
|
|
MessageBox.Show(cmdID);<br>
|
|
<span style="color:blue;">break</span>;<br>
|
|
}<br>
|
|
}<br>
|
|
[<span style="color:#2b91af;">DllImport</span>(<span style="color:#a31515;">"user32"</span>, EntryPoint = <span style="color:#a31515;">"InsertMenuA"</span>, CharSet = <span style="color:#2b91af;">CharSet</span>.Ansi, SetLastError = <span style="color:blue;">true</span>, ExactSpelling = <span style="color:blue;">true</span>)]<br>
|
|
<br>
|
|
<span style="color:blue;">private</span> <span style="color:blue;">static</span> <span style="color:blue;">extern</span> <span style="color:blue;">bool</span> InsertMenu(System.<span style="color:#2b91af;">IntPtr</span> hMenu, <span style="color:blue;">int</span> uPosition, <span style="color:blue;">int</span> uFlags, System.<span style="color:#2b91af;">IntPtr</span> uIDNewItem, <span style="color:blue;">string</span> lpNewItem);<br>
|
|
[<span style="color:#2b91af;">DllImport</span>(<span style="color:#a31515;">"user32"</span>, EntryPoint = <span style="color:#a31515;">"TrackPopupMenu"</span>, CharSet = <span style="color:#2b91af;">CharSet</span>.Ansi, SetLastError = <span style="color:blue;">true</span>, ExactSpelling = <span style="color:blue;">true</span>)]<br>
|
|
<br>
|
|
<span style="color:blue;">private</span> <span style="color:blue;">static</span> <span style="color:blue;">extern</span> <span style="color:blue;">int</span> TrackPopupMenu(<span style="color:#2b91af;">IntPtr</span> hMenu, <span style="color:blue;">int</span> uFlags, <span style="color:blue;">int</span> x, <span style="color:blue;">int</span> y, <span style="color:blue;">int</span> nReserved, <span style="color:#2b91af;">IntPtr</span> hWnd, <span style="color:#2b91af;">IntPtr</span> prcRect);<br>
|
|
}<br>
|
|
}</p>
|
|
|
|
<p style="font-family: Courier New; font-size: 13; color: black; background: white" class="APICODE">
|
|
</p>
|
|
</font>
|
|
<p style="font-family: Courier New; font-size: 13; color: black; background: white url('')" align="center">
|
|
<a href="#Top">Back to top</a></p>
|
|
|
|
</body>
|
|
|
|
</html>
|