drawfocusrect 用法存疑,
											哪位兄弟对api比较熟悉,帮我看看我的这段程序那里的逻辑有问题?我得不到正确的矩形。。。代码如下:
 程序代码:
程序代码:
**************************************************
*-- Form:         form1 (d:\documents\visual foxpro 项目\drawrectangle.scx)
*-- ParentClass:  form
*-- BaseClass:    form
*-- Time Stamp:   09/19/22 11:52:08 PM
*
DEFINE CLASS form1 AS form
    Top = 0
    Left = -1
    Height = 650
    Width = 1000
    DoCreate = .T.
    BorderStyle = 3
    Caption = "Form1"
    MaxButton = .F.
    Name = "Form1"
    ADD OBJECT container1 AS container WITH ;
        Top = 0, ;
        Left = 0, ;
        Width = 1000, ;
        Height = 650, ;
        SpecialEffect = 1, ;
        BackColor = RGB(255,255,255), ;
        Name = "Container1"
    ADD OBJECT form1.container1.timer1 AS timer WITH ;
        Top = 10, ;
        Left = 10, ;
        Height = 23, ;
        Width = 23, ;
        Name = "Timer1"
    PROCEDURE long2str
        PARAMETERS longval
        PRIVATE i, retstr
        retstr = ""
        FOR i = 24 TO 0 Step -8
            retstr = CHR(int(longval/(2^i))) + retstr
            longval = mod(longval, (2^i))
        NEXT
        Return retstr
    ENDPROC
    PROCEDURE Resize
        this.container1.Width=this.Width-1
        this.container1.Height=this.Height-1
    ENDPROC
    PROCEDURE container1.MouseMove
        LPARAMETERS nButton, nShift, nXCoord, nYCoord
        this.tox=nxcoord
        this.toy=nycoord
    ENDPROC
    PROCEDURE container1.MouseDown
        LPARAMETERS nButton, nShift, nXCoord, nYCoord
        IF nbutton=1 &&mouse left 
            this.x=nxcoord
            this.y=nycoord
        ENDIF
        this.timer1.Interval=100
    ENDPROC
    PROCEDURE container1.Init
        this.AddProperty("X",0)
        this.AddProperty("Y",0)
        this.AddProperty("toX",0)
        this.AddProperty("toY",0)
        this.AddProperty("oldX",0)
        this.AddProperty("oldY",0)
        this.AddProperty("iscleared",.t.)
        STORE 1 TO this.Top,this.left
        this.Height=thisform.Height-1
        this.Width=thisform.Width-1
    ENDPROC
    PROCEDURE container1.MouseUp
        LPARAMETERS nButton, nShift, nXCoord, nYCoord
        this.timer1.Interval=0
        IF this.iscleared=.f. 
            lcrect=thisform.long2str(this.x)+thisform.long2str(this.y)+thisform.long2str(this.oldx)+thisform.long2str(this.oldy)
            DrawFocusRect(getdc(thisform.hwnd),lcrect)
            this.iscleared=.t.
        ENDIF
    ENDPROC
    PROCEDURE timer1.Init
        DECLARE Integer DrawFocusRect IN WIN32API ;
        Integer hdc , ;
        String lpRect
        DECLARE Integer GetDC IN WIN32API ;
        Integer hwnd
        DECLARE integer ReleaseDC IN WIN32API integer hwnd,integer hdc
    ENDPROC
    PROCEDURE timer1.Timer
        IF this.parent.tox>this.parent.x and this.parent.toy>this.parent.y
            IF this.Parent.tox#this.Parent.oldx or this.Parent.toy#this.Parent.oldy
                lcrect=thisform.long2str(this.parent.x)+thisform.long2str(this.parent.y)+thisform.long2str(this.parent.tox)+thisform.long2str(this.parent.toy)
                DrawFocusRect(getdc(thisform.hwnd),lcrect)
                *************************************************************************************************
                ACTIVATE SCREEN
                ?this.parent.iscleared &&我观察程序运行过程用
                ??this.parent.x,this.Parent.y,this.parent.oldx,this.parent.oldy,this.parent.tox,this.parent.toy
                *************************************************************************************************
                this.parent.oldx=this.Parent.tox
                this.parent.oldy=this.Parent.toy
                IF this.Parent.iscleared=.f.
                    this.Parent.iscleared=.t.
                ELSE 
                    this.Parent.iscleared=.f.
                ENDIF
            ENDIF
        ENDIF
    ENDPROC
ENDDEFINE
*
*-- EndDefine: form1
**************************************************
我的企图: 按下鼠标键,移动鼠标,实时画出一个矩形,鼠标松开后,矩形清除。

 
											





 
	    




