SDI(单文档)最大化后如何获取CFromView区域大小

尘中远 2011-10-11 08:17:02
做一个SDI单文档程序,想一开始就最大化,但是对话框的控件没变于是就想在刚生成对话框时MoveWindow使控件也跟着最大化,但是却没成功获取我想要的CFromView区域大小
如图1

图一所示就是我想获取的大小
--------------
我在CFromView的OnInitialUpdate中用GetClientRect,发现只是得到CFromView对应的对话框大小
图2

代码如下
m_rViewRegion是CRect类型
void CXXXView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();

GetClientRect(&m_rViewRegion);
CString str;
str.Format(_T("%d,%d,%d,%d"),m_rViewRegion.left,m_rViewRegion.top,m_rViewRegion.right,m_rViewRegion.bottom);
AfxMessageBox(str);
}

AfxMessageBox得到的数值是图2所示对话框区域的大小
现在就希望程序刚启动时把tab控件占满FromView区域,不知如何获取那片区域的大小

后来我在OnSize里用GetClientRect得到的却是图1那个区域的大小
...全文
303 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-11-03
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
尘中远 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xjkstar 的回复:]
Updata了吗?
[/Quote]
什么意思?
13妖 2011-10-12
  • 打赏
  • 举报
回复
Updata了吗?
尘中远 2011-10-12
  • 打赏
  • 举报
回复
代码如下:
m_rViewRegion是CFromView的CRect类型变量
void CXXXView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();

// GetClientRect(&m_rViewRegion);
// CMainFrame *pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
// CMainFrame *pFrame=(CMainFrame *)AfxGetMainWnd();
// pFrame->GetClientRect(&m_rViewRegion);

CString str;
str.Format(_T("%d,%d,%d,%d"),m_rViewRegion.left,m_rViewRegion.top,m_rViewRegion.right,m_rViewRegion.bottom);
AfxMessageBox(str);

// InitUICtrl(m_rViewRegion);
}


void CXXXView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);

if (this)
{
this->GetClientRect(&m_rViewRegion);
}
}
尘中远 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jennyvenus 的回复:]
OnSize里面要判断一些东西,比如某控件是否已经有效,有效之后再进行排列处理。

C/C++ code
void CAPdu::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialogApdu::OnSizing(fwSide, pRect);

// TODO: Add your message handler code……
[/Quote]

在CFromView的单文档里貌似还是获取到图2所示CFromView对应的对话框大小,而不是图1红框的大小
用户 昵称 2011-10-12
  • 打赏
  • 举报
回复
OnSize里面要判断一些东西,比如某控件是否已经有效,有效之后再进行排列处理。

void CAPdu::OnSizing(UINT fwSide, LPRECT pRect) 
{
CDialogApdu::OnSizing(fwSide, pRect);

// TODO: Add your message handler code here
myresize();
}

void CAPdu::myresize( void )
{
#define SPACE1 (8)
#define JIANGE1 (5)
#define TOP1 (20)
RECT client, tool;
RECT r1;

if( this )
{
this->GetClientRect( &client );
尘中远 2011-10-12
  • 打赏
  • 举报
回复
搞定了,我一直想在OnInitialUpdate来调整,其实在OnSize里调整就行了
void CXXXView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if (this)
{
this->GetClientRect(&m_rViewRegion);
InitUICtrl(cx,cy);//用来调整控件使得最大化
}
}
d_ecade 2011-10-12
  • 打赏
  • 举报
回复
我也碰到了这个问题,无法解决,期望有大虾出来解惑。不胜感激
gameslq 2011-10-11
  • 打赏
  • 举报
回复
在OnInitialUpdate中能获得view的真实大小,请检查你的代码
尘中远 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jennyvenus 的回复:]
写一个函数,在最开始与OnSize里面调用一下,窗口大小用GetClientRect,原始大小用GetTotalSize(好像是这个)
[/Quote]
我跟终了一下,程序开始直到界面出现,CFromView的OnSize(UINT nType, int cx, int cy)触发了17次
我记录了一下
void CXXXView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
static int i(0);
CString str;
GetClientRect(&m_rViewRegion);
i++;
str.Format(_T("%d次:%d,%d,%d,%d"),i,m_rViewRegion.left,m_rViewRegion.top,m_rViewRegion.right,m_rViewRegion.bottom);
AfxMessageBox(str);
}


--------------------
序号 bottom,right
--------------------
1:485,901
2:0,0
3:471,988
4:471,988
5:472,989
6:471,989
7:472,989
8:471,989
9:461,988
10:344,988
11:565,1362
12:565,1362
13:485,901(在这里就跳转到OnInitialUpdate)
14:350,988
15:350,988
16:565,1362
17:565,1362(这是我想要的尺寸)
----------------
尘中远 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 schlafenhamster 的回复:]
是不是:
CMainFrame *pFrm=(CMainFrame *)AfxGetMainWnd();
CRect rc;
pFrm->GetClientRect(&rc);
afxDump << rc << "\n";
[/Quote]
不行还是图2对话框的大小
用户 昵称 2011-10-11
  • 打赏
  • 举报
回复
写一个函数,在最开始与OnSize里面调用一下,窗口大小用GetClientRect,原始大小用GetTotalSize(好像是这个)
schlafenhamster 2011-10-11
  • 打赏
  • 举报
回复
是不是:
CMainFrame *pFrm=(CMainFrame *)AfxGetMainWnd();
CRect rc;
pFrm->GetClientRect(&rc);
afxDump << rc << "\n";
尘中远 2011-10-11
  • 打赏
  • 举报
回复
点击看大图!

15,978

社区成员

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

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