如何设置一个可以resize的对话框的最小尺寸?谢谢

shangke_sks 2004-10-09 10:05:41
偶要做一个可以用鼠标改变大小的对话框,但是对话框尺寸有个最小值。

目前我想到的方法是,在OnSize中检查,当对话框的尺寸小于这个置时,就设置对话框的尺寸为最小值。
这个办法不好,当改变对话框的尺寸小于最小值时,对话框会强烈的闪烁。

所以我想请教各位大虾,是不是有什么方法可以直接设置一个最小值,让系统来控制这个问题。
...全文
406 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fool_leave 2004-10-09
  • 打赏
  • 举报
回复
同意楼上,处理WM_SIZING消息,在OnSizing里
void CSizeDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
if(pRect->right-pRect->left<100){
return ;
}
CDialog::OnSizing(fwSide, pRect);
}
DentistryDoctor 2004-10-09
  • 打赏
  • 举报
回复
WM_SIZING,只要小于你允许的尺寸就返回FALSE,否则返回TRUE.
windindance 2004-10-09
  • 打赏
  • 举报
回复
拦截WM_SIZE消息
如果尺寸小于最小值时,直接把尺寸修改为最小值。
fool_leave 2004-10-09
  • 打赏
  • 举报
回复
楼上的方法更好.
如果用OnSizing直接返回是不行,我以前是通过强制改变参数LPRECT的值来实现的.不过要判断fwSide的值,看看它是WMSZ_LEFT还是其他的什么,这样决定是采用pRect->right = pRect->left + 400;还是
pRect->left=pRect->right- 400;
  • 打赏
  • 举报
回复
技术上可行
符合你的要求吗?
如果不明白,你可以
(1),给我发短消息(请附帖子的地址).
(2),根据http://www.vcshare.net上的联系方式与我联系,推荐QQ.
(3),如果问题简单,请在http://www.vcshare.net/bbs上发帖.
如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖.
同时在www.csdn.net上发帖,并给出在我的论坛的链接.
---------------
压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.
  • 打赏
  • 举报
回复
ctrl+w 打开类向导
选择最后一个属性页class info
message filters改成window,默认是dialog

否则看不到此消息
  • 打赏
  • 举报
回复
void CHideMainDlgDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
lpMMI->ptMinTrackSize.x = 500 ; //宽
lpMMI->ptMinTrackSize.y = 300 ; //高
CDialog::OnGetMinMaxInfo(lpMMI);
}
ctrl+w 打开类向导
选择最后一个属性页class info
message filters改成window,默认是dialog
shangke_sks 2004-10-09
  • 打赏
  • 举报
回复
谢谢几位的讲解。我试验了一下,发现这样几个问题。

1,不知道在那里添加WM_SIZING消息响应函数,所以只能手动的加了一个。楼上的两位是怎么添加这个函数的?

2,但是发现直接return的话,并不能阻止窗口尺寸改变。也许是我添加这个函数的方式不对?

3,不得已,我手动的改变了CDialog::OnSizing(fwSide, pRect);中Rect参数,达到了预期的效果。


void CTestResizeDlgDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
if( (pRect->right - pRect->left) < 400 )
{
pRect->right = pRect->left + 400;
CDialog::OnSizing(fwSide, pRect);
}
else
CDialog::OnSizing(fwSide, pRect);
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧