MFC对话框实现拖拉产生的灰色框怎么去掉?程序的背景是图片,在加上拖拉的功能时就会出现一个灰色的框,使用剪切的方式只能剪掉上边和左边的灰色线框,右和下是要拖拉的,所以没法剪,不知有没有方法可以动态剪切的?请高手指点!!我用border和代码实现的拖拉都带有灰色线框!

解决方案 »

  1.   

    ?听不懂。关键是在尺寸改变时你希望背景如何表现。如果是要在改变尺寸时背景图充满,可以StretchBlt。
      

  2.   


    举个例子吧,就说浏览器好了,浏览器实现了在鼠标移到边缘线的时候会出现一个拉大小的一个双向箭头的,我的程序背景是图片的,加了这个功能后边缘会出现一个灰色的线框,在普通的MFC对话框上是没有这个灰色的线框的。
      

  3.   

    那就不要用系统的拖动,自己写个拖动吧
    可以在鼠标移动时,不停的BITBLT或则StretchBlt
      

  4.   

    以下是我在OnSize实现的拖拉,不停的BITBLT或则StretchBlt??如何实现?在哪实现?
    CDialog::OnSize(nType, cx, cy); //对话框宽度和高度的增量
    int iIncrementX = cx - m_iClientWidth;
    int iIncrementY = cy - m_iClientHeight;
    //最小化时增量为0
    if (nType == SIZE_MINIMIZED)
    {
    iIncrementX = iIncrementY =0;
    }
    for (int i=0;i<m_iControlNumber;i++)
    {
    CWnd *pWndCtrl=NULL;
    int iId=m_pControlArray[i].iId;
    int iFlag = m_pControlArray[i].iFlag;
    int iPercent = m_pControlArray[i].iPercent;
    // 无效值
    if ((iPercent < 0) || (iPercent > 100))
    continue; // 得到控件指针
    pWndCtrl = GetDlgItem(iId);
    if ((NULL != pWndCtrl) && IsWindow(pWndCtrl->GetSafeHwnd()))
    {
    CRect rectCtrl;
    pWndCtrl->GetWindowRect(rectCtrl);
    ScreenToClient(rectCtrl);
    int iLeft = rectCtrl.left;
    int iTop = rectCtrl.top;
    int iWidth = rectCtrl.Width();
    int iHeight = rectCtrl.Height();
    switch (iFlag)
    {
    case MOVEX: // X方向移动
    iLeft += (iIncrementX * iPercent / 100);
    break; case MOVEY: // Y方向移动
    iTop += (iIncrementY * iPercent / 100);
    break; case MOVEXY: // X方向和Y方向同时移动
    iLeft += (iIncrementX * iPercent / 100);
      iTop += (iIncrementY * iPercent / 100);
    break; case ELASTICX: // X方向改变大小
    iWidth += (iIncrementX * iPercent / 100);
    break; case ELASTICY: // Y方向改变大小
    iHeight += (iIncrementY * iPercent / 100);
    break; case ELASTICXY: // X方向和Y方向同时改变大小
    iWidth += (iIncrementX * iPercent / 100);
    iHeight += (iIncrementY * iPercent / 100);
    break; default:
    ;
    }
    // 把控件移动到新位置
    pWndCtrl->MoveWindow(iLeft, iTop, iWidth, iHeight);
    }

    }
    if(nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED)//窗体大小发生变动。处理函数resize
    {
    resize();
    } // 把图标移动到对话框右下角
    if (IsWindow(m_wndSizeIcon.GetSafeHwnd()))
    {
    m_wndSizeIcon.MoveWindow(cx - m_bitmap.bmWidth, cy - m_bitmap.bmHeight, m_bitmap.bmWidth, m_bitmap.bmHeight);
    } // 记录对话框client区域的大小
    if (nType != SIZE_MINIMIZED)
    {
    m_iClientWidth = cx;
    m_iClientHeight = cy;
    }
      

  5.   

    是拖动窗口时候产生的哪个灰色的虚线框吗?
    SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,TRUE/FALSE,0,SPIF_SENDCHANGE);
      

  6.   

    LS的方法好
    SPI_SETDRAGHEIGHT:设置用于检测拖拉操作起点的矩形区域的高度,单位为像素。参考GETSYSTEMMETRICS函数的nlndex参数中的SM_CXDRAG和SM_CYDRAG。