如何将屏幕坐标转为word坐标

时间:2021-07-08 06:40:48
本人正坐一个简单的word手写板,得到了屏幕坐标,不知道如何转为word坐标,不知道个位高手有什么好的想法和思路,谢谢

17 个解决方案

#1


SetMapMode 这个函数不知道有没有用?如果你用vc++~
对坐标的转换我概念也很模糊。

#2


正愁这事了...WORD可以多页,不知道你是不是想得到,相对页首左上角的坐标,没想到解决办法.
关注中!

#3


想到了,但是如果我页就不好算了

#4


呵呵,ME也是一样的问题,关注中

#5


ding

#6


up

#7


ttt2 (家合万事兴) 兄弟你解决了吗?我也在愁这个事情呀,你如何解决的?

#8


提示1:WORD中有一个getpoint的方法
提示2:WORD中有方法可以获得页边距
提示3:通过以上方法还是没有能实现

#9


提示4 我能实现 

#10


那就告诉人家,来这儿就是信任大家

哈哈

ding

#11


up

#12


www.http://www.utcsoft.com/pages/family050.htm

#13


学习中

#14


关注手写功能

#15


ttt2 (家合万事兴) 我觉得你很难直接去得到,而应该逆向思考,即先将一个WORD元素转换为屏幕坐标,然后通过屏幕坐标和WORD坐标换算比例来得到一个映射公式然后代入屏幕坐标求出WORD坐标.听起来比较麻烦,但实际上不麻烦的,我已经实现,但并不是这个转换,是效果类似的东西.我目前也在找直接转换的方法,兄弟找到了告诉我下,谢了
shps=doc.GetShapes();
app.SetScreenUpdating(FALSE);
// shp=shps.AddPicture("C:\\1.bmp",vFalse,vTrue,&COleVariant((long)0),&COleVariant((long)0),&COleVariant((long)144),&COleVariant((long)144),vOpt);//144=192/4*3
shp=shps.AddOLEControl(vControlName,&COleVariant((long)0),&COleVariant((long)0),&COleVariant((long)144),&COleVariant((long)144),vOpt);//144=192/4*3
// shp.SetName("YJTZ");
float Zoom;
win=doc.GetActiveWindow();
vie=win.GetView();
zoo=vie.GetZoom();
Zoom=zoo.GetPercentage();
Zoom/=100;
// shp.IncrementTop(ph*a.intVal+ph/2);
/* var.lVal = 1;
int num=ishps.GetCount();
for (int i=1;i<=num;i++)
{
ishp=ishps.Item(i);
float f=ishp.GetHeight();
if(f==48.75)
break;
}*/
// ishp=ishps.Item(ishps.GetCount());
// shp=ishp.ConvertToShape();
win.GetPoint(&ScrPosX,&ScrPosY,&ScrWidth,&ScrPosHeight,shp);
shp.IncrementLeft((CurScrPoint.x-ScrPosX)/1.333/Zoom-50);
shp.IncrementTop((CurScrPoint.y-ScrPosY)/1.333/Zoom-50);
shp.SetLockAnchor(0);
shp.ZOrder(5);
war=shp.GetWrapFormat();
war.SetAllowOverlap(-1);
war.SetSide(0);
war.SetType(3);
app.SetScreenUpdating(TRUE);

以上是我的代码,效果类似.

#16


关注手写签名,大家有什么方案,怎么实现的讨论一下

#17


谢谢 rovoboy(魂之猎人) 定位问题已经解决,定位非常准确

#1


SetMapMode 这个函数不知道有没有用?如果你用vc++~
对坐标的转换我概念也很模糊。

#2


正愁这事了...WORD可以多页,不知道你是不是想得到,相对页首左上角的坐标,没想到解决办法.
关注中!

#3


想到了,但是如果我页就不好算了

#4


呵呵,ME也是一样的问题,关注中

#5


ding

#6


up

#7


ttt2 (家合万事兴) 兄弟你解决了吗?我也在愁这个事情呀,你如何解决的?

#8


提示1:WORD中有一个getpoint的方法
提示2:WORD中有方法可以获得页边距
提示3:通过以上方法还是没有能实现

#9


提示4 我能实现 

#10


那就告诉人家,来这儿就是信任大家

哈哈

ding

#11


up

#12


www.http://www.utcsoft.com/pages/family050.htm

#13


学习中

#14


关注手写功能

#15


ttt2 (家合万事兴) 我觉得你很难直接去得到,而应该逆向思考,即先将一个WORD元素转换为屏幕坐标,然后通过屏幕坐标和WORD坐标换算比例来得到一个映射公式然后代入屏幕坐标求出WORD坐标.听起来比较麻烦,但实际上不麻烦的,我已经实现,但并不是这个转换,是效果类似的东西.我目前也在找直接转换的方法,兄弟找到了告诉我下,谢了
shps=doc.GetShapes();
app.SetScreenUpdating(FALSE);
// shp=shps.AddPicture("C:\\1.bmp",vFalse,vTrue,&COleVariant((long)0),&COleVariant((long)0),&COleVariant((long)144),&COleVariant((long)144),vOpt);//144=192/4*3
shp=shps.AddOLEControl(vControlName,&COleVariant((long)0),&COleVariant((long)0),&COleVariant((long)144),&COleVariant((long)144),vOpt);//144=192/4*3
// shp.SetName("YJTZ");
float Zoom;
win=doc.GetActiveWindow();
vie=win.GetView();
zoo=vie.GetZoom();
Zoom=zoo.GetPercentage();
Zoom/=100;
// shp.IncrementTop(ph*a.intVal+ph/2);
/* var.lVal = 1;
int num=ishps.GetCount();
for (int i=1;i<=num;i++)
{
ishp=ishps.Item(i);
float f=ishp.GetHeight();
if(f==48.75)
break;
}*/
// ishp=ishps.Item(ishps.GetCount());
// shp=ishp.ConvertToShape();
win.GetPoint(&ScrPosX,&ScrPosY,&ScrWidth,&ScrPosHeight,shp);
shp.IncrementLeft((CurScrPoint.x-ScrPosX)/1.333/Zoom-50);
shp.IncrementTop((CurScrPoint.y-ScrPosY)/1.333/Zoom-50);
shp.SetLockAnchor(0);
shp.ZOrder(5);
war=shp.GetWrapFormat();
war.SetAllowOverlap(-1);
war.SetSide(0);
war.SetType(3);
app.SetScreenUpdating(TRUE);

以上是我的代码,效果类似.

#16


关注手写签名,大家有什么方案,怎么实现的讨论一下

#17


谢谢 rovoboy(魂之猎人) 定位问题已经解决,定位非常准确