我们把结构封装为类,目的是省却foxer去记复杂的api函数声明,以及涩晦难懂的结构申明,所以还应该对我的point类进行改造。
改造后的point类如下:
**************************************************
*-- Class:
_point (d:\documents\visual foxpro 项目\myclass.vcx)
*-- ParentClass:
struct (d:\documents\visual foxpro 项目\myclass.vcx)
*-- BaseClass:
custom
*-- Time Stamp:
11/08/22 09:02:13 AM
*
DEFINE CLASS _point AS struct
*-- x坐标
x = .F.
*-- Y坐标
y = .F.
PROCEDURE struct_assign
LPARAMETERS vNewVal
*To do: Modify this routine for the Assign method
*!*
THIS.struct = m.vNewVal
*!*
this.x=CTOBIN(SUBSTR(m.vnewval,1,4),"4rs")
*!*
this.y=CTOBIN(SUBSTR(m.vnewval,5,4),"4rs")
ENDPROC
PROCEDURE set
PARAMETERS xorcstruct,y
DO case
CASE PARAMETERS()=1 AND VARTYPE(xorcstruct)=="C" && 注意这里的xorcstruct不是数字,而是8字节字符,我并没有对字符串的有效性进行检查。
this.x=CTOBIN(SUBSTR(xorcstruct,1,4),"4rs")
this.y=CTOBIN(SUBSTR(xorcstruct,5,4),"4rs")
this.struct=xorcstruct
CASE PARAMETERS()=2
this.x=xorcstruct
this.y=y
this.struct=BINTOC(xorcstruct)+BINTOC(y)
OTHERWISE
RETURN .f.
ENDCASE
*!*
PARAMETERS x,y
*!*
this.struct=BINTOC(x,"4rs")+BINTOC(y,"4rs")
ENDPROC
PROCEDURE Init
DECLARE integer GetCursorPos IN WIN32API string@
ENDPROC
PROCEDURE Destroy
CLEAR DLLS
ENDPROC
*-- 获取当前鼠标所在点的位置,成功返回.t.
PROCEDURE get
cstruct=opoint.struct
getcursorpos(@cstruct)
this.set(cstruct)
ENDPROC
ENDDEFINE
*
*-- EndDefine: _point
**************************************************
这样用户就不需要申明api函数了,直接用就可以了。
***pointtest.prg***
CLEAR
SET CLASSLIB TO "D:\Documents\Visual FoxPro 项目\myclass.VCX"
opoint=CREATEOBJECT("_point")
opoint.get()
?opoint.x
?opoint.y
release opoint
**************
当需要将一个确定的点以结构体的形式当参数传给其他函数yourfunc,可以这样用:
opoint.set(200,500) &&设置坐标点(200,500)
yourfunc(opoint.struct) &&传给你的函数
[此贴子已经被作者于2022-11-8 09:18编辑过]