MFC对话框实现拖拉产生的灰色框 MFC对话框实现拖拉产生的灰色框怎么去掉?程序的背景是图片,在加上拖拉的功能时就会出现一个灰色的框,使用剪切的方式只能剪掉上边和左边的灰色线框,右和下是要拖拉的,所以没法剪,不知有没有方法可以动态剪切的?请高手指点!!我用border和代码实现的拖拉都带有灰色线框! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ?听不懂。关键是在尺寸改变时你希望背景如何表现。如果是要在改变尺寸时背景图充满,可以StretchBlt。 举个例子吧,就说浏览器好了,浏览器实现了在鼠标移到边缘线的时候会出现一个拉大小的一个双向箭头的,我的程序背景是图片的,加了这个功能后边缘会出现一个灰色的线框,在普通的MFC对话框上是没有这个灰色的线框的。 那就不要用系统的拖动,自己写个拖动吧可以在鼠标移动时,不停的BITBLT或则StretchBlt 以下是我在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; } 是拖动窗口时候产生的哪个灰色的虚线框吗?SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,TRUE/FALSE,0,SPIF_SENDCHANGE); LS的方法好SPI_SETDRAGHEIGHT:设置用于检测拖拉操作起点的矩形区域的高度,单位为像素。参考GETSYSTEMMETRICS函数的nlndex参数中的SM_CXDRAG和SM_CYDRAG。 求CheckBox选择项位运算问题 百分求一个题目! 两个目录(包括所有的子目录)的改变地方 结构体指针参数问题 请问有人知道在vc里面如何实现vb的集合对象 请问这种情况下,窗口的ClassName是什么? 请问如何解决计算机的分辨率改变后,程序对话框大小变化的情况! 一堆大数据中找到相同的数 请问这个...这个API?? telnet 中操作文件的权限问题 WINVER not defined. Defaulting to 0x0600 (Windows Vista) 用Button键后再点击窗口无响应
举个例子吧,就说浏览器好了,浏览器实现了在鼠标移到边缘线的时候会出现一个拉大小的一个双向箭头的,我的程序背景是图片的,加了这个功能后边缘会出现一个灰色的线框,在普通的MFC对话框上是没有这个灰色的线框的。
可以在鼠标移动时,不停的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;
}
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,TRUE/FALSE,0,SPIF_SENDCHANGE);
SPI_SETDRAGHEIGHT:设置用于检测拖拉操作起点的矩形区域的高度,单位为像素。参考GETSYSTEMMETRICS函数的nlndex参数中的SM_CXDRAG和SM_CYDRAG。