<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://communities.bentley.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>[MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/communities/other_communities/chinafirst/f/microstation-projectwise/179153/msce-c</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520489?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 09:57:11 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:f1fd7cc5-07e1-4824-8284-b2241bd0d0b5</guid><dc:creator>Yongan.Fu</dc:creator><description>&lt;p&gt;感谢分享！&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520475?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 09:01:50 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:81741524-df20-42a1-b17d-87c8c8cca958</guid><dc:creator>lingwei liu</dc:creator><description>&lt;p&gt;搞定，结贴，谢谢二位大佬！&lt;/p&gt;
&lt;p&gt;C++端：&lt;/p&gt;
&lt;p&gt;extern &amp;quot;C&amp;quot; __declspec(dllexport) void __stdcall worldPointToGlobalScreenPoint(int viewNumber, DPoint3d worldPoint, Point2d* globalScreenPoint) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; MSDialogP viewWindow = mdlWindow_viewWindowGet(viewNumber);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; DPoint3d viewPoint;&lt;br /&gt;&amp;nbsp; &amp;nbsp; DPoint3d screenPoint;&lt;br /&gt;&amp;nbsp; &amp;nbsp; viewWindow-&amp;gt;GetViewport()-&amp;gt;ActiveToView(&amp;amp;viewPoint, &amp;amp;worldPoint, 1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; viewWindow-&amp;gt;GetViewport()-&amp;gt;ViewToScreen(&amp;amp;screenPoint, &amp;amp;viewPoint, 1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; Point2d pointInMdl{ (int)screenPoint.x, (int)screenPoint.y };&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; if (mdlWindow_isGlobalPointConversionRequired(viewWindow-&amp;gt;GetScreenNumber())) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mdlWindow_globalPointConversionIncrease(globalScreenPoint, viewWindow, &amp;amp;pointInMdl);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;C#端：&lt;/p&gt;
&lt;p&gt;[DllImport("MstnLib.dll")]&lt;br /&gt; public static extern void worldPointToGlobalScreenPoint(int viewNumber, Bentley.GeometryNET.DPoint3d worldPoint, ref Bentley.GeometryNET.Point2d globalScreenPoint);&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520448?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 06:50:01 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:f1e470c6-926f-41ea-8574-31659517680c</guid><dc:creator>lingwei liu</dc:creator><description>&lt;p&gt;嗯，正在加紧封装中，谢谢！&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520445?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 06:30:39 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:d14997c2-57d1-4fed-b865-5ce290047279</guid><dc:creator>Yongan.Fu</dc:creator><description>&lt;p&gt;您需要用C++/CLI封装一下供C#调用，或者通过C#的PInvoke技术（可百度来学习）来调用C++函数。&lt;/p&gt;
&lt;p&gt;目前高级的较低层的功能还仅存在于C++中，C#未封装。&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520441?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 06:12:08 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:2a37e9ec-6ba4-4235-a5a4-77b4e47052b5</guid><dc:creator>lingwei liu</dc:creator><description>&lt;p&gt;C#里面怎么把第二个参数传到&lt;span&gt;mdlWindow_globalPointConversionIncrease中去呢？&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520440?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 06:02:59 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:3afbdd4f-9a64-4518-800f-36ff1b6adcaa</guid><dc:creator>dorlig na</dc:creator><description>&lt;p&gt;这里你最终需要的是globlePoint而不是screenPt2d。 我是直接粘过来了另外一个帖子， 他想得到screen(monitor) point&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520438?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 05:58:42 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:8bd5daae-7460-4075-8161-d283fa242728</guid><dc:creator>dorlig na</dc:creator><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // note: you can use the following corrected code piece to get pure windows screen point for the button event.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // both pointInMDLclient and globlePoint are in a window coordinates which is relative to a window rect.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // as you said, Viewport::ViewToScreen don&amp;#39;t return screen point in fact.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // please focus on the using of mdlWindow_globalPointConversionIncrease which is the key point here.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // other changes just rename the variable names to make it&amp;#39;s meaning more accurate.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ev.GetViewPoint returns the mouse position of client area of the view window,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Viewport::ViewToScreen returns the point which is relative to left-up corner of a special client window which&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // is the gray area to contain the 8 view windows. The special client window is like the Win32&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // MDClient for multi-document program, and we also call it usable area&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DPoint3d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pointInMDLclient3D = { 0 };&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ev.GetViewport ()-&amp;gt;ViewToScreen (&amp;amp;pointInMDLclient3D, ev.GetViewPoint (), 1);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point2d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pointInMDLclient = { (int)pointInMDLclient3D.x, (int)pointInMDLclient3D.y };&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // in CE, because there is ribbon bar, we must convert the pointInMDLclient to global point which is relative to&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the left-up conner of the main frame window.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point2d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; globlePoint = { 0 };&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSDialogP viewWindow = mdlWindow_viewWindowGet (ev.GetViewNum ());&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (mdlWindow_isGlobalPointConversionRequired (viewWindow-&amp;gt;GetScreenNumber ()))&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlWindow_globalPointConversionIncrease (&amp;amp;globlePoint, viewWindow, &amp;amp;pointInMDLclient);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; globlePoint = pointInMDLclient;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // now use mdlWindow_globalPointToScreen to convert the global point to screen point which is pure windows concept&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // but not the Microstation concept, and I don&amp;#39;t think there is equivalent C++ method in DgnButtonEvent or other class&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point2d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;screenPt2d = { 0 };&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlWindow_globalPointToScreen (&amp;amp;screenPt2d, mdlWindow_viewWindowGet (ev.GetViewNum ()), &amp;amp;globlePoint);&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520437?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 05:44:39 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:ac3a99e9-c5e7-48d4-9ced-6a4034104a48</guid><dc:creator>dorlig na</dc:creator><description>&lt;p&gt;因为ribbon还有minimize状态，所以最好用mdlWindow_globalPointConversionIncrease&amp;nbsp;进行转换&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520436?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 05:41:15 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:a8a04ef4-36a9-4afe-bd5c-36438ae1f0c2</guid><dc:creator>dorlig na</dc:creator><description>&lt;p&gt;我看了这个函数的实现，只是在不同窗口之间进行client, screen之间的转换，没有&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520413?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 03:33:33 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:6f4d8323-5164-43bf-b3f5-d46e7388bd62</guid><dc:creator>dorlig na</dc:creator><description>&lt;p&gt;不知能否直接得那个高度，我再看看。感觉不可以。&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520412?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 03:31:29 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:ffd06219-e715-4a2c-a6d3-83b7c6b5113c</guid><dc:creator>dorlig na</dc:creator><description>&lt;p&gt;是的。在加上一个判断。&lt;/p&gt;
&lt;p&gt;if (mdlWindow_isGlobalPointConversionRequired (viewWindow-&amp;gt;GetScreenNumber ()))&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mdlWindow_globalPointConversionIncrease (&amp;amp;globlePoint, viewWindow, &amp;amp;pointInMDLclient);&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520411?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 03:27:46 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:571c7456-ba59-4244-8b21-4de98f609ddd</guid><dc:creator>lingwei liu</dc:creator><description>&lt;div class="contents"&gt;
&lt;div class="memitem"&gt;
&lt;div class="memproto"&gt;
&lt;table class="memname"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="memname"&gt;void mdlWindow_globalPointConversionIncrease&lt;/td&gt;
&lt;td&gt;(&lt;/td&gt;
&lt;td class="paramtype"&gt;Point2d *&amp;nbsp;&lt;/td&gt;
&lt;td class="paramname"&gt;&lt;em&gt;newGlobalPtP&lt;/em&gt;,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="paramkey"&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td class="paramtype"&gt;MSWindowP&amp;nbsp;&lt;/td&gt;
&lt;td class="paramname"&gt;&lt;em&gt;windowP&lt;/em&gt;,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="paramkey"&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td class="paramtype"&gt;Point2dCP&amp;nbsp;&lt;/td&gt;
&lt;td class="paramname"&gt;&lt;em&gt;oldGlobalPtP&lt;/em&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="memdoc"&gt;
&lt;p&gt;When the Ribbon interface is used, to position popup windows and dynamics correctly, the global point requires a conversion to compensate for the height of the Ribbon.&lt;/p&gt;
&lt;p&gt;This function converts the global point by increasing the point by the height of the Ribbon.&lt;/p&gt;
&lt;p&gt;这是API文档中的一个函数，我的理解是：因为用了ribbon界面，所以需要对计算的屏幕坐标进行修正。因为调用这个函数比较麻烦，所以我想直接获取那个高度，然后自己计算。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520410?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 03:09:54 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:00193e96-6637-4468-959f-78c6ad4e1ddb</guid><dc:creator>lingwei liu</dc:creator><description>&lt;p&gt;我在DgnPrimitiveTool中用ViewPort的ViewToScreen方法将鼠标点转为屏幕坐标后，发现返回的坐标需要加上这个高度才是正确的显示屏坐标，所以想获取这个高度&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [MSCE C#]如何获取顶部菜单和工具栏的高度？</title><link>https://communities.bentley.com/thread/520406?ContentTypeID=1</link><pubDate>Tue, 07 May 2019 02:56:38 GMT</pubDate><guid isPermaLink="false">6dad98f5-dbc9-4c4d-a9ba-e9da8dc6aa8e:c36f0dc4-00ac-49e2-a084-5eafe4b522f5</guid><dc:creator>Yongan.Fu</dc:creator><description>&lt;p&gt;请问您想实现什么功能需要获取此高度值？&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>