乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 312|回复: 11

怎样获取CAD绘图区域左上角的屏幕坐标

[复制链接]

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2016-1-22 15:02:00 | 显示全部楼层 |阅读模式
通过 PointToScreen 只能获取某点相对于绘图区域 左上角屏幕坐标,要想获取此点在屏幕上的绝对坐标,还必须获取左上角的屏幕坐标。

yw1xcqogxc1.jpg

yw1xcqogxc1.jpg


l0ni5dncs0x.png

l0ni5dncs0x.png

回复

使用道具 举报

xgr

56

主题

302

帖子

8

银币

中流砥柱

Rank: 25

铜币
526
发表于 2019-5-30 13:54:00 | 显示全部楼层
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using System.Windows.Forms;
  4. using Application = Autodesk.AutoCAD.ApplicationServices.Core.Application;
  5. namespace 取得CAD绘图区域屏幕坐标
  6. {
  7. public partial class Form1 : Form
  8. {
  9. public Form1()
  10. {
  11. InitializeComponent();
  12. }
  13. [DllImport("user32.DLL", EntryPoint = "GetTopWindow", SetLastError = true, CharSet = CharSet.Unicode,
  14. ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
  15. public static extern IntPtr GetTopWindow(IntPtr hWnd);
  16. [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
  17. public static extern IntPtr GetWindow(IntPtr hWnd, UInt32 uCmd);
  18. [DllImport("user32.dll")]
  19. [return: MarshalAs(UnmanagedType.Bool)]
  20. static extern bool GetWindowRect(IntPtr hWnd, ref Rect lpRect);
  21. [StructLayout(LayoutKind.Sequential)]
  22. public struct Rect
  23. {
  24. public int Left; //最左坐标
  25. public int Top; //最上坐标
  26. public int Right; //最右坐标
  27. public int Bottom; //最下坐标
  28. }
  29. private void button1_Click(object sender, EventArgs e)
  30. {
  31. Rect rect = new Rect();
  32. IntPtr intPtr1 = GetTopWindow(Application.DocumentManager.MdiActiveDocument.Window.Handle);
  33. textBox1.Text = intPtr1.ToString();
  34. IntPtr intPtr2 = GetWindow(intPtr1, 2);
  35. GetWindowRect(intPtr2, ref rect);
  36. textBox2.Text = rect.Left.ToString();
  37. textBox3.Text = rect.Top.ToString();
  38. textBox4.Text = (rect.Right - rect.Left).ToString();
  39. textBox5.Text = (rect.Bottom - rect.Top).ToString();
  40. }
  41. }
  42. }

gfukalfwv1v.PNG

gfukalfwv1v.PNG

回复

使用道具 举报

9

主题

25

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
61
发表于 2018-7-30 20:37:00 | 显示全部楼层
解决我一个难题,CAD截图
回复

使用道具 举报

3

主题

127

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2016-1-22 21:24:00 | 显示全部楼层
读取系统变量"VIEWSIZE" "SCREENSIZE" "VIEWCTR"计算
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2016-1-22 21:39:00 | 显示全部楼层
此方法不行
回复

使用道具 举报

4

主题

71

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
87
发表于 2016-1-23 07:28:00 | 显示全部楼层
同步学习中…………谢谢
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2016-1-23 21:56:00 | 显示全部楼层

CPoint pt(0,0);
acedDwgPoint ptOut;
acedCoordFromPixelToWorld(pt,ptOut);
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2016-1-24 22:43:00 | 显示全部楼层

不好意思 ,我在.net 中没有找到此方法呢acedCoordFromPixelToWorld  ,能说详细点不?谢谢!!
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2016-1-24 23:32:00 | 显示全部楼层
[DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl, EntryPoint = "?acedCoordFromWorldToPixel@@YAHHQBNAAVCPoint@@@Z")]
private static extern bool acedCoordFromWorldToPixel(int viewportNumber, ref Point3d worldPt, out Point pixel);
经查证,acedCoordFromPixelToWorld   与 Editor.PointToScreen 方法得到的结果一样。
回复

使用道具 举报

26

主题

281

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
385
发表于 2016-1-25 14:39:00 | 显示全部楼层
复制代码
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 01:46 , Processed in 0.178740 second(s), 75 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表