快速业务通道

建立磁性窗体

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
;
      Enabled=true;
      hAttachTo=NULL;
    }
   };

函数DistanceIn用于判断两个整数的距离是否在指定范围内:

// 整数i1和i2的差的绝对值小于i3
   bool DistanceIn(unsigned int i1,unsigned int i2,unsigned int i3)
   {
    if(i1>i2)
    { // 确保i2>=i1;
    int t=i1;
    i1=i2;
    i2=t;
    }
    return i2-i1<=i3;
   }
   //---------------------------------------------------------------------------
   // i1<=i2   bool Mid(unsigned int i1,unsigned int i2,unsigned int i3)
   {
    return ((i1<=i2) && (i2   }
   //---------------------------------------------------------------------------

AttachToForm是处理窗体粘贴的关键函数,如果进行了粘贴,则保存粘贴到的窗体的句柄,并调整窗体的位置。在函数中使用了窗体的Tag属性保存了一个CFormAttachStyle类的实例指针,原因将在稍后进行说明,参数distance表示可以进行粘贴的距离。窗口粘贴在上下、左右各有3种形式,都需要加以判断。

// 把窗体My粘到主窗体上

bool AttachToForm(TForm *My, TForm *Form, RECT *r,int distance)
   {
    CFormAttachStyle *MyStyle=(CFormAttachStyle *)My->Tag;
    if(MyStyle==NULL)return false; // 这个窗体不支持粘贴
    //准备粘贴到的窗体的位置
    RECT rMain;
    GetWindowRect(Form->Handle,&rMain);
    MyStyle->AttachTo=NULL;
    MyStyle->yPos=r->top;
    MyStyle->xPos=r->left;
    // 上下方向判断
    MyStyle->YStyle=AS_NONE;
    if( Mid(rMain.left,r->left,rMain.right)
      || Mid(r->left,rMain.left,r->right)
      || (MyStyle->XStyle!=AS_NONE))
    {
      if(DistanceIn(r->top,rMain.bottom,space))
      {
       MyStyle->YStyle=AS_BOTTOM;
       MyStyle->yPos=rMain.bottom;
      }else if(DistanceIn(r->top,rMain.top,space))
      {
       MyStyle->YStyle=AS_TOP;
       MyStyle->yPos=rMain.top;
      }else if(DistanceIn(r->bottom,rMain.top,space))
      {
       MyStyle->YStyle=AS_T_TOP;
       MyStyle->yPos=rMain.top-(r->bottom-r->top);
      }
    }
    // 左右方向判断
    MyStyle->XStyle=AS_NONE;
    if( Mid(rMain.top,r->top,rMain.bottom)
      || Mid(r->top,rMain.top,r->bottom)
      || (MyStyle->YStyle!=AS_NONE))
    {
      if(DistanceIn(r->left,rMain.left,space))
      {
       MyStyle->XStyle=AS_LEFT;
       MyStyle->xPos=rMain.left;
      }else if(DistanceIn(r->left,rMain.right,space))
      {
       MyStyle->XStyle=AS_RIGHT;
       MyStyle->xPos=rMain.right;
      }else if(DistanceIn(r->right,rMain.left,space))
      {
       MyStyle->XStyle=AS_L_LEFT;
       MyStyle->xPos=rMain.left-(r->right-r->left);
      }
    }
    My->Left=MyStyle->xPos;
    My->Top=MyStyle->yPos;
    if(MyStyle->XStyle!=AS_NONE || MyS

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号