控件为什么不随窗口大小改变

fongzl 2008-06-08 07:11:03
SDI窗体,拆分为左右两个视图,右侧为TabCtrl,我想让它随窗体大小改变
现在的问题是,拖动改变窗口或者拖动分割栏的时候,TabCtrl大小随之改变,但是点击最大化的时候却不改变
请问要怎样修改?
这是代码:
void CHNTSView::OnSize(UINT nType, int cx, int cy) //CHNTS是主程序
{
if(nType!=SIZE_MINIMIZED && cx>0 && cy>0)
RecalcLayout();
CView::OnSize(nType, cx, cy);

// TODO: Add your message handler code here

}
//当此类改变大小时调用此函数
void CHNTSView::RecalcLayout()
{
CWnd * pWnd = (CWnd *) GetActiveView();
HWND hWnd =this->GetSafeHwnd();
CRect rect;
HDC hDC;
hDC=::GetWindowDC(hWnd);
CDC * pDC =new CDC;
pDC->Attach(hDC);
pDC->GetClipBox(&rect);
m_TabCtrl.RecalcLayout(rect,pWnd);//m_TabCtrl的定义:CViewTabCtrl m_TabCtrl;
delete pDC;
}

//当标签控件所在的视图改变大小时调用此函数
void CViewTabCtrl::RecalcLayout(CRect &rect, CWnd *wnd)
{
SetWindowPos(NULL,rect.left ,rect.top ,rect.right -rect.left ,
rect.bottom -rect.top ,SWP_NOZORDER);
AdjustRect(false,&rect);
wnd->SetWindowPos(NULL,rect.left ,rect.top ,rect.right -rect.left ,
rect.top -rect.bottom ,SWP_SHOWWINDOW);
}
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我定位控件的代码。m_ClientTree树控件,m_Client_State状态栏,m_RemoteDesktop图像显示板m_Desktop_State状态栏
最好用MoveWindow和::GetClientRect
void CPcWorldControlerDlg::OnSize(UINT nType, int cx, int cy)
{
RECT rc;
if(m_ClientTree.m_hWnd)
{
m_ClientTree.MoveWindow(0,0,cx/4,cy-19,true);
::GetClientRect(m_ClientTree.m_hWnd,&rc);
rc.right+=3;
m_Client_State.MoveWindow(0,cy-19+1,rc.right,18,true);

m_RemoteDesktop.MoveWindow(rc.right,0,cx-rc.right,cy-19,true);
m_Desktop_State.MoveWindow(rc.right,cy-19+1,cx-rc.right,18,true);
}
CDialog::OnSize(nType, cx, cy);
}
zqh886 2008-06-09
  • 打赏
  • 举报
回复
我也想这个问题的答案......关注!
t_ianya 2008-06-09
  • 打赏
  • 举报
回复
关注
加泰罗尼亚 2008-06-09
  • 打赏
  • 举报
回复
学到一点东西了,顶
fongzl 2008-06-09
  • 打赏
  • 举报
回复
已经可以了
m_TabCtrl.MoveWindow(0,0,cx,cy);//加上这个就可以大小一起变化了,很奇怪

但是以前为什么不行呢?
wnd->SetWindowPos(NULL,rect.left ,rect.top ,rect.right -rect.left , rect.top -rect.bottom ,SWP_SHOWWINDOW); 


真是感觉没入门:(
fongzl 2008-06-09
  • 打赏
  • 举报
回复
还没有试楼上的代码,现在发现第一次进入的时候,cx和cy的值都为0,设断点单步执行后TabCtrl不显示,去掉断点正常,奇怪啊
void CHNTSView::OnSize(UINT nType, int cx, int cy) 
{
if(nType!=SIZE_MINIMIZED && cx>0 && cy>0)
RecalcLayout();
CView::OnSize(nType, cx, cy);

// TODO: Add your message handler code here

}
32131532 2008-06-08
  • 打赏
  • 举报
回复
ding

15,979

社区成员

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

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