分享

如何实现可拉伸对话框?

 ttbetter 2011-01-07
#define WIDTHMOVEDLG   4 //拉伸对话框的宽度

  //拉伸对话框
  CTransparentDlg *m_pMoveDlg;
  //对话框是否处于可移动状态
  BOOL m_bMoveable;
  //拉伸的起始位置
  CPoint m_ptOrigin;//在OnLButtonDown中取值
  //模板对话框是否处于移动状态
  BOOL m_bDlgMoving;
  //模板对话框拉伸的类型,1表示从左边拉伸,2表示从右边拉伸,3表示从下面拉伸
  int m_nMoveStyle;

void C**Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

//-----以下的程序用于实现对话框的拉伸------/////
CRect rect,rectLeft,rectRight,rectDown;
GetClientRect(&rect);

//设置可移动矩形区域的大小
//左边可移动区域
rectLeft.SetRect(
  rect.left,
  rect.top,
  rect.left+WIDTHMOVEDLG+2,
  rect.bottom
  );
//右边可移动区域
rectRight.SetRect(
  rect.right-WIDTHMOVEDLG-2,
  rect.top,
  rect.right,
  rect.bottom
  );
//下方可移动区域
rectDown.SetRect(
  rect.left,
  rect.bottom-WIDTHMOVEDLG-2,
  rect.right,
  rect.bottom
  );
  //从左边拉伸
  if (rectLeft.PtInRect(point))//如果鼠标点在左边区域上
  {

   //设置鼠标指针表现形式:指向西东

   SetCursor(LoadCursor(NULL,IDC_SIZEWE));
   m_bMoveable = TRUE;
   m_nMoveStyle = 1;
  }
  //从右边拉伸
  else  if (rectRight.PtInRect(point))//如果鼠标点在右边区域上
  {

   //设置鼠标指针表现形式:指向西东
   SetCursor(LoadCursor(NULL,IDC_SIZEWE));
   m_bMoveable = TRUE;
   m_nMoveStyle = 2;
  }
  //从下方拉伸
  else if(rectDown.PtInRect(point))//如果鼠标点在下边区域上
  {

   //设置鼠标指针表现形式:指向南北
   SetCursor(LoadCursor(NULL,IDC_SIZENS));
   m_bMoveable = TRUE;
   m_nMoveStyle = 3;
  }

  else
  {
   m_bMoveable = FALSE;
  }

  //移动虚线对话框
  ClientToScreen(&point);//客户区域坐标转换成为屏幕区域坐标

  int dx,dy;

  //如果左键已经点击下去

  if (m_pMoveDlg && m_bDlgMoving && nFlags == MK_LBUTTON)
  {
   //水平方向移动的距离
   dx = point.x- m_ptOrigin.x;
   dy = point.y - m_ptOrigin.y;
   //竖直方向移动的距离
   if (m_nMoveStyle == 1)
   {
    m_pMoveDlg -> MoveWindow(
     rect.left+dx,
     101,
     WIDTHMOVEDLG+2,
     rect.Height());
   }
   else if (m_nMoveStyle == 2)
   {
    CRect rc;
    GetWindowRect(&rc);

    int width = point.x - rc.left;
    if (width <200)
    {
     m_pMoveDlg -> MoveWindow(
      rc.left+194,
      101,
      WIDTHMOVEDLG+2,
      rect.Height());
    }
    else
    {
     m_pMoveDlg -> MoveWindow(
      rect.right+dx-WIDTHMOVEDLG-2,
      101,
      WIDTHMOVEDLG+2,
      rect.Height());
    }
   
   }
   else if ( 3 == m_nMoveStyle)
   {
    CRect rc;
    GetWindowRect(&rc);

   

    int y = point.y - rc.top;

    if (y >150)
    {
     m_pMoveDlg -> MoveWindow(
      rc.left,
      rect.bottom+dy-WIDTHMOVEDLG-2,
      rect.Width(),
      WIDTHMOVEDLG+2);
    }
    else

    {
     m_pMoveDlg -> MoveWindow(
     rc.left,
     rc.top +150,
     rect.Width(),
     WIDTHMOVEDLG+2);
    }
   }
   else
   {
    return;
   }
  }
////--------------------------------------------////

CDialog::OnMouseMove(nFlags, point);
}



创建鼠标指针的风格与样式

HINSTANCE hinst;            // handle to current instance

HCURSOR hCurs1, hCurs2; // cursor handles

// Create a standard  cursor.

hCurs1 = LoadCursor(NULL, IDC_WAIT); //见附注

// Create a custom cursor based on a resource.

hCurs2 = LoadCursor(hinst, MAKEINTRESOURCE(240));

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多