基于对话框程序,怎样使对话框可调大小,但要限制能调到的最小尺寸? 也就是说使对话框窗口可调整大小,但要限制一个最小值,使窗口不能调整为700*500以下的大小。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 响应WM_SIZING void CMyDlg::OnSizing(UINT fwSide, LPRECT pRect) { CDialog::OnSizing(fwSide, pRect); // TODO: Add your message handler code here CRect rect(pRect); int width = rect.Width(); int height = rect.Height(); switch(fwSide) { case WMSZ_BOTTOM: { if (height < MINDLG_HEIGHT) pRect->bottom = pRect->top + MINDLG_HEIGHT; break; } case WMSZ_LEFT: { if (width < MINDLG_WIDTH) pRect->left = pRect->right - MINDLG_WIDTH; break; } case WMSZ_RIGHT: { if (width < MINDLG_WIDTH) pRect->right = pRect->left + MINDLG_WIDTH; break; } case WMSZ_TOP: { if (height < MINDLG_HEIGHT) pRect->top = pRect->bottom - MINDLG_HEIGHT; break; } case WMSZ_TOPLEFT: { if (width < MINDLG_WIDTH) pRect->left = pRect->right - MINDLG_WIDTH; if (height < MINDLG_HEIGHT) pRect->top = pRect->bottom - MINDLG_HEIGHT; break; } case WMSZ_TOPRIGHT: { if (width < MINDLG_WIDTH) pRect->right = pRect->left + MINDLG_WIDTH; if (height < MINDLG_HEIGHT) pRect->top = pRect->bottom - MINDLG_HEIGHT; break; } case WMSZ_BOTTOMLEFT: { if (width < MINDLG_WIDTH) pRect->left = pRect->right - MINDLG_WIDTH; if (height < MINDLG_HEIGHT) pRect->bottom = pRect->top + MINDLG_HEIGHT; break; } case WMSZ_BOTTOMRIGHT: { if (width < MINDLG_WIDTH) pRect->right = pRect->left + MINDLG_WIDTH; if (height < MINDLG_HEIGHT) pRect->bottom = pRect->top + MINDLG_HEIGHT; break; } } }classwizard里没有WM_SIZING这个消息啊。 终于找到了。重载 OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 消息 lpMMI->ptMinTrackSize.x = 400 ; lpMMI->ptMinTrackSize.y = 400 ; lpMMI->ptMaxTrackSize.x = 500 ; lpMMI->ptMaxTrackSize.y = 500 ; CDialog::OnGetMinMaxInfo(lpMMI);这样就可以限制最大和最小的尺寸了当然在VC的缺省的ClassWizard里不能处理这个消息,因为VC缺省认为Dialog是不改变大小的,你在进入ClassWizard后,先选择Class Info把Message Filter里的Dialog先该为Window,然后回到Message Maps里添加该消息,添加后,再回到Class Info,改回Dialog然后去编写代码了,记住,在资源的对话框的属性里里,把对话框设置为可改变大小的 void CDrawTestDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); CWnd * pWnd = GetDlgItem(IDC_WORKSPACE); if( pWnd ) { CRect rcTmp; GetClientRect(&rcTmp); pWnd->MoveWindow(&rcTmp); } } 关于CBitmapButton的使用问题 bigint和负数的问题 c++下ui界面你们是怎么设计的更漂亮? OCX编译问题 求救:怎样用程序打开一个IE页面。。。。。。在线等待 国足真的是差了啊!第一场都被逼平了! 母亲,我是钓鱼岛! 有关数组在函数中传递的问题,谢谢! 请问怎么用MFC的CTime类修改机器时间 skinmagic给对话框换肤后,标题栏上的最大最小化按钮不见了,请问大侠们这样才能显示最大最小按钮呀 会者应该不难,关于程序与Web的一次性登陆问题!! ComboBox的选择改变问题
void CMyDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialog::OnSizing(fwSide, pRect);
// TODO: Add your message handler code here
CRect rect(pRect);
int width = rect.Width();
int height = rect.Height();
switch(fwSide)
{
case WMSZ_BOTTOM:
{
if (height < MINDLG_HEIGHT)
pRect->bottom = pRect->top + MINDLG_HEIGHT;
break;
}
case WMSZ_LEFT:
{
if (width < MINDLG_WIDTH)
pRect->left = pRect->right - MINDLG_WIDTH;
break;
}
case WMSZ_RIGHT:
{
if (width < MINDLG_WIDTH)
pRect->right = pRect->left + MINDLG_WIDTH;
break;
}
case WMSZ_TOP:
{
if (height < MINDLG_HEIGHT)
pRect->top = pRect->bottom - MINDLG_HEIGHT;
break;
}
case WMSZ_TOPLEFT:
{
if (width < MINDLG_WIDTH)
pRect->left = pRect->right - MINDLG_WIDTH;
if (height < MINDLG_HEIGHT)
pRect->top = pRect->bottom - MINDLG_HEIGHT;
break;
}
case WMSZ_TOPRIGHT:
{
if (width < MINDLG_WIDTH)
pRect->right = pRect->left + MINDLG_WIDTH;
if (height < MINDLG_HEIGHT)
pRect->top = pRect->bottom - MINDLG_HEIGHT;
break;
}
case WMSZ_BOTTOMLEFT:
{
if (width < MINDLG_WIDTH)
pRect->left = pRect->right - MINDLG_WIDTH;
if (height < MINDLG_HEIGHT)
pRect->bottom = pRect->top + MINDLG_HEIGHT;
break;
}
case WMSZ_BOTTOMRIGHT:
{
if (width < MINDLG_WIDTH)
pRect->right = pRect->left + MINDLG_WIDTH;
if (height < MINDLG_HEIGHT)
pRect->bottom = pRect->top + MINDLG_HEIGHT;
break;
}
}
}
classwizard里没有WM_SIZING这个消息啊。
重载 OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 消息 lpMMI->ptMinTrackSize.x = 400 ;
lpMMI->ptMinTrackSize.y = 400 ; lpMMI->ptMaxTrackSize.x = 500 ;
lpMMI->ptMaxTrackSize.y = 500 ; CDialog::OnGetMinMaxInfo(lpMMI);这样就可以限制最大和最小的尺寸了
当然在VC的缺省的ClassWizard里不能处理这个消息,因为VC缺省认为
Dialog是不改变大小的,你在进入ClassWizard后,先选择Class Info
把Message Filter里的Dialog先该为Window,然后回到Message Maps里
添加该消息,添加后,再回到Class Info,改回Dialog
然后去编写代码了,记住,在资源的对话框的属性里里,
把对话框设置为可改变大小的
{
CDialog::OnSize(nType, cx, cy);
CWnd * pWnd = GetDlgItem(IDC_WORKSPACE);
if( pWnd )
{
CRect rcTmp;
GetClientRect(&rcTmp);
pWnd->MoveWindow(&rcTmp);
}
}