当前位置: 代码迷 >> PB >> pb调用api函数画线有关问题
  详细解决方案

pb调用api函数画线有关问题

热度:194   发布时间:2016-04-29 09:26:47.0
pb调用api函数画线问题
PB调用API函数:MoveToEx,LineTo画线,
函数声明:
FUNCTION boolean LineTo(ulong hwnd,long wx, long wy) LIBRARY "Gdi32.dll"
FUNCTION ulong MoveToEx(ulong hdc,long x,long y,ref strpos lpPoint) LIBRARY "gdi32.dll"
其中,strpos是一个结构体{xpos,ypos}
调用代码如下:
int ii_x,ii_y
strpos pos_zb
ii_x = p_1.X
ii_y = p_1.Y
pos_zb.xpos=100
pos_zb.ypos=100
MoveToEx(GetDC(handle(p_1)),ii_x,ii_y,pos_zb) 
LineTo(GetDC(handle(p_1)),300,200) 
想实现从[100,100]到[300,200]画线,
但是它总是从P_1的左上方顶点开始画,为什么?
如何修改?
多谢!!

------解决方案--------------------
x y 都需要转换一下 ,
ii_x = UnitsToPixels(p_1.X , xUnitsToPixels!)
ii_y = UnitsToPixels(p_1.Y ,yUnitsToPixels! )

用到位置 ,长度的地方,都需要转一下 ,你测试一下,不行我再来

------解决方案--------------------
把代码改为

int ii_x,ii_y 
strpos pos_zb 
ii_x = p_1.X 
ii_y = p_1.Y 
pos_zb.xpos=100 
pos_zb.ypos=100 
MoveToEx(GetDC(0),ii_x,ii_y,pos_zb) 
LineTo(GetDC(0),300,200) 
从[100,100]到[300,200]画线
即可实现
------解决方案--------------------
如果要在p_1中划线,应该不能用p_1的坐标,MoveToEx里的坐标就是以p_1为基础的
int ii_x,ii_y 
strpos pos_zb 
ii_x = p_1.X 
ii_y = p_1.Y 
pos_zb.xpos=100 
pos_zb.ypos=100 
MoveToEx(GetDC(handle(p_1)),0,0,pos_zb) 
LineTo(GetDC(handle(p_1)),300,200) 

------解决方案--------------------
原来有个例子是怎么样调用api做图的,找不到了。
  相关解决方案