如何决定CFormView类程序的窗口大小?

No9 2002-07-27 11:34:02
在一个使用CFormView类派生的SDI程序中如何在程序开始时设定窗口的大小,比如说800*200的大小?
...全文
536 23 打赏 收藏 举报
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
No9 2002-08-06
To tonyzym:
谢谢你的关心!
由于这个帖子已经结束了,如果你愿意,请到下面的地址中领分!
http://211.157.102.21/expert/topic/921/921380.xml?temp=4.639834E-02

明天就要结贴加分哟!
  • 打赏
  • 举报
回复
tonyzym 2002-08-03
完全可行,
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

cs.cx=800;
cs.cy=200;
cs.style=WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU |
WS_MINIMIZEBOX;
//定义窗口大小,使窗口大小不能改变。
return TRUE;
}
但Form要足够大!!!否则仅由Form大小决定。但若太大会自动出滚动条,限制窗口为800*200
  • 打赏
  • 举报
回复
No9 2002-08-03
To ThisTimeThree:
这个思路的确不行的,我的代码就是基本就是这样的:
void CNetCountView::OnInitialUpdate()
{
SetScrollSizes(MM_TEXT,CSize(800,200));
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();

// 设置列表控件的大小
CRect rtClient;
GetClientRect(rtClient);
m_oRecordList.MoveWindow(rtClient);
……
}
其结果就是我说的那样,这个问题看来是有一定的难度的,由于本帖已经有一段时间了,所以我决定结束本帖,再另开一个帖子进行讨论。
欢迎各位继续捧场!
  • 打赏
  • 举报
回复
ThisTimeThree 2002-08-03
CMyFormView::OnSetWindowPos()
{
//找到View,假定你应该知道怎样得到client的大小
SetScrollSize(MM_TEXT,clientsize.x,clientsize.y);
m_ListCtrl.MoveWindow(0,0,clientsize.x,clientsize.y);
return ...
}
//这是个思路,不一定能行,我的HD被我自己格式(因为无法解决的系统操作原因)化还没重新安Visual Studio,所以不能自己测试,一千作过,记忆不清楚,很抱歉,这个参考了制作高端视界面的一般技术,
  • 打赏
  • 举报
回复
No9 2002-08-01
但我又遇上了一个新问题!

就是我在CFormView类中动态设定了控件——CListCtrl类的大小[为全部的客户区域],目前是CListCtrl类自己包含一个滚动条,可以进行正确翻页,而CFormView类也包含一个滚动条,它翻页后下面一部分就是空白的了,应该怎么办呀?其实根本就不需要客户区中的那个滚动条的!
  • 打赏
  • 举报
回复
No9 2002-08-01
上面几位老兄说的方法是不错!
使用 SetScrollSizes()就可以解决问题了!
  • 打赏
  • 举报
回复
czn 2002-08-01


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.x=0;
cs.y=0;

return TRUE;
}



void CTemp1View::OnInitialUpdate()
{
SetScrollSizes(MM_TEXT,CSize(800,600));

CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit(FALSE);

}
  • 打赏
  • 举报
回复
czn 2002-08-01


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.x=0;
cs.y=0;

return TRUE;
}



SetScrollSizes(MM_TEXT,CSize(800,200));

CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit(FALSE);
  • 打赏
  • 举报
回复
ThisTimeThree 2002-08-01
问题是,如果你在程序中动态添加控件,使其超过原对话框模板边界,你是不能滚动到边界以外的,把我的和snow的添在一起就可以了。建议楼主回贴并结贴
  • 打赏
  • 举报
回复
czn 2002-08-01
同意Flysnow!
  • 打赏
  • 举报
回复
ThisTimeThree 2002-07-31
SetScrollSize(try this) meets your requirement, PS. this is last question I answer any question on CSDN, gimme some score, I got this answer from a MSDN VIP, but that cost me to wait for one whole day, therefore the problem is hard,
  • 打赏
  • 举报
回复
No9 2002-07-30
To yuanhang1977:
我说的是有CFormView类派生的程序!
~~~~~~
至于cs.y 和 cs.x仅仅是决定窗口在屏幕上的位置而已!
  • 打赏
  • 举报
回复
yuanhang1977 2002-07-29
没有问题呀,你可能忘了设置窗口的相对位置,即cs.y 和 cs.x
  • 打赏
  • 举报
回复
ThisTimeThree 2002-07-29
Probably That ResizeParentToFit which was called automatically by your MFC generated class canceled the effect of MoveWindow , try remove this call from OnCreateClient or OnInitialUpdate in "CDFormView" and Call MoveWindow instead of RecalcLayout() and ResizeParentToFit();
  • 打赏
  • 举报
回复
Flysnow 2002-07-29
可以这样说,虽然你改变窗口大小的话,实际上也只有对话框大小的地方是你的控件,其他的都是没用的

我比较常用的方法是,把
GetParentFrame()->RecalcLayout();
ResizeParentToFit();

去掉,对话框的控件全都动态安排位置,这样就很不错了
  • 打赏
  • 举报
回复
No9 2002-07-29
To Flysnow:
你的意思是说视的大小是完全由对话框的大小决定吗?是不是!?
~~
  • 打赏
  • 举报
回复
Flysnow 2002-07-29
看你视类的这个虚函数

void CFormXXXView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();

}


是不是什么都明白了 ResizeParentToFit()就把那个对话框的大小和视联系起来了
  • 打赏
  • 举报
回复
ThisTimeThree 2002-07-29
SetScrollSize(...
这样可以吗
  • 打赏
  • 举报
回复
No9 2002-07-29
怎么没有人回答呀?
都睡午觉了吗?
  • 打赏
  • 举报
回复
No9 2002-07-28
To 600000:
你方法固然可行,但好像不是最佳的方法,这等于有重新设置了一下窗口的大小了!
  • 打赏
  • 举报
回复
加载更多回复(3)
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2002-07-27 11:34
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……