怎样限制windows窗口的最小尺寸?

rmryt 2004-11-24 02:42:18
我们都知道windows窗口是可以拖放的。可大可小,大到全屏。小到只剩下标题栏上的最大最小化和关闭按钮。那么该如何限定窗口最小不会小于给定像素的尺寸?向RealOne Player那样,再拉小也只能那么小?

我本想在响应WM_SIZE消息的OnSize()函数里判断窗口尺寸有没有小于限定值,但是当执行OnSize()时窗口已经小于限定尺寸了。所以好象不行,还有没有其他的方法呢?

今天一共问了5个问题了。我怀疑过不了几天我的分数就全问完了,我目前还没有能力赚分,所以请各位高手多指点,别嫌我给的点数太少。
...全文
给本帖投票
1646 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
北京的雾霾天 2004-11-24
  • 打赏
  • 举报
回复
对窗口的最大或最小的控件可以添加对消息WM_GETMINMAXINFO的处理,而不管这个窗口是什么类型的.
就像下面的代码可以对一个窗口处理大小问题.
void CChild::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
lpMMI->ptMaxTrackSize=CPoint(600,500);//最大的窗体大小
lpMMI->ptMinTrackSize=CPoint(300,200); //最小的窗口大小,大小只能在这两个值之间
CDialog::OnGetMinMaxInfo(lpMMI);
}
likunfeng 2004-11-24
  • 打赏
  • 举报
回复
如果是一个可以缩放的对话框又该如何做?
surstar 2004-11-24
  • 打赏
  • 举报
回复
每天登陆一次 加10 分 呵呵
saliors 2004-11-24
  • 打赏
  • 举报
回复
响应WM_GETMINMAXINFO消息,如下:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
// TODO: Add your message handler code here and/or call default
CFrameWnd::OnGetMinMaxInfo(lpMMI);

lpMMI->ptMinTrackSize.x = 640;
lpMMI->ptMinTrackSize.y = 480;
}
最小尺寸为640*480
rmryt 2004-11-24
  • 打赏
  • 举报
回复
顺便再问一下,由于窗口大小可以放大缩小。上面的控件(比如按纽)也响应OnSize事件随着移动,我用的是MoveWindow()函数。但是窗口缩放后由于控件移动到原来控件的位置,这时候会留下一些重影,很难看,有什么办法消除不?是不是要刷新窗口界面?该用什么函数?
rmryt 2004-11-24
  • 打赏
  • 举报
回复
谢谢指点,我已经实现了。顺便说一下,我的VC 6.0的ClassWizard里面居然找不到WM_GETMINMAXINFO消息。还是我手动添加的。
在对话框的头文件里加入 afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
还要在对话框的cpp文件的 BEGIN_MESSAGE_MAP()里面加入ON_WM_GETMINMAXINFO()
最后就是void CMyDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)这个函数了。

15,980

社区成员

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

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

手机看
关注公众号

关注公众号

客服 返回
顶部