关于如何限制视图大小的简单问题,解决立即结贴,在线等待
各位:
小弟用 CSplitterWnd 切分出了 3 个视图,把窗体分成两列,左边是独立的一个视图,右边再横向分出了 2 个视图。现在的问题是,在运行的时候,用户可以拖动分割条来改变两边视图的大小,我希望是可以改变大小,但是有一个大小的限度,比如,当拖动分割条改变左边视图的宽度时,我希望最小不能小于 300 ,如果小于 300 就固定不能再拖动了。不知道如何写代码,希望大家给予指点,谢谢
问题点数:50、回复次数:6Top
1 楼vcleaner(我没当大哥很久了.......)回复于 2004-12-02 10:51:46 得分 5
处理OnSize消息处理函数,加以限制,MoveWindowTop
2 楼Jacky1206(胖胖,其实我不胖)回复于 2004-12-02 11:20:21 得分 0
首先谢谢楼上的。
问题是到底是怎么写?我希望限定的是 Frame 里面某个视图的大小
if (cx < 800) {
.......???
}Top
3 楼EnochShen(小疯子:真的好菜—知耻而后勇!)回复于 2004-12-02 12:16:36 得分 5
OnSize
if (cx < 800)
{
cx = 800;
}
Top
4 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-02 12:19:41 得分 0
CSplitterWnd::SetRowInfo /CSplitterWnd::SetColumnInfoTop
5 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-02 12:21:08 得分 40
也可派生一个CSplitterWnd的子类,处理消息
WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_SETCURSOR,如果不满足你的条件,就回避标准的CSplitterWnd的处理过程。Top
6 楼Jacky1206(胖胖,其实我不胖)回复于 2004-12-02 13:23:17 得分 0
OnSize
if (cx < 800)
{
cx = 800;
}
这种方法是没有用的,我试过了
if (cx < 800) {
MoveWindow(0, 0, 800, cy);
}
如果是写在 MainFrame 的 OnSize 里面会造成严重的闪烁,写在视图的 OnSize 里面也没有用
至于说 CSplitterWnd::SetRowInfo /CSplitterWnd::SetColumnInfo,好像也不能写在 MainFrame 里面吧,因为我觉得 MainFrame 的 OnSize 方法传入的 cx 和 cy 参数应该不是针对我正在移动分割条的那个视图的 cx 和 cy 吧。如果是写在视图的 OnSize 里面,是否是通过
CMainFrame *pMain = (CMainFrame *)AfxGetApp() -> GetMainWnd();
pMain ->m_wndSplitter;
来得到 CSplitterWnd 对象呢?我一运行就出错。。。。。。Top




