如何生成一个可拖动的控件?比如编辑框等。

解决方案 »

  1.   

    lbtndn里判断SetCursorlbtnup里movewindow你的控件再setcursor成平常的原理就是这样的了嘿嘿嘿
      

  2.   

    BOOL m_bMove;
    响应编辑框OnClickDown消息,然后发送一个消息给父窗口的m_bMove=TRUE,让父窗口的子线程负责移动。
    响应编辑框OnClickUp消息,发送一个消息给父窗口的m_bMove=FALSE,父窗口的子线程停止移动。
      

  3.   

    some code FYIvoid CMyButton::OnMouseMove(UINT nFlags, CPoint point) 
    {
        CRect CltRect,DlgRect;   //声名按钮区域和父窗口区域    POINT mPoint;           //声名鼠标坐标
        mPoint=point;
        ClientToScreen(&mPoint);   //转化成屏幕坐标
        GetClientRect(CltRect);        
        ClientToScreen(CltRect);
        GetParent()->GetClientRect(DlgRect);
        ClientToScreen(DlgRect);    int minX,minY,maxX,maxY;         //父窗口的最大最小区域坐标
        int x,y;
        minX=DlgRect.left;
        minY=DlgRect.top;
        maxX=DlgRect.right;
        maxY=DlgRect.bottom;
        
        srand((unsigned)time(NULL));     //初始化
        int isAdd;                        //坐标相加还是减少
        isAdd=rand();
        isAdd=isAdd%2+1;
        if(isAdd==1)
        {//处理按钮的x坐标
            x=rand();
            x=x%((mPoint.x-CltRect.Width()-1)-minX)+minX;
        }
        else
        {//处理按钮的x坐标
            x=rand();
            x=x%(maxX-(mPoint.x+1))+(mPoint.x+1);
        }
        isAdd=rand();
        isAdd=isAdd%2+1;
        if(isAdd==1)
        {//处理按钮的y坐标
            y=rand();
            y=y%((mPoint.y-CltRect.Height()-1)-minY)+minY;
        }
        else
        {//处理按钮的y坐标
            y=rand();
            y=y%(maxY-(mPoint.y+1))+(mPoint.y+1);
        }        POINT ClientPt;
        ClientPt.x=x;
        ClientPt.y=y;
        ScreenToClient(&ClientPt);          //客户坐标    MoveWindow(ClientPt.x,ClientPt.y,CltRect.Width(),CltRect.Height());//移动
        CButton::OnMouseMove(nFlags, point);
    }