有关使用CTabCtrl控件的客户区尺寸问题~~~

blldw 2008-03-05 03:25:45
我的问题是这样的:
在单文档视图里,将整个框架划分为上下两部分,其中下半部分的视图为自己从CCtrlView继承来的CInfoTabView,具体代码是参照着CTreeView来的。我想做的是在CInfoTabView上面放置一个CEdit控件,在单击不同的Tab标签时,通过CEdit成员SetWindowText函数来显示不同的内容。
现在的问题是怎么总不能将CEdit空间放置在合适的位置,即CTabCtrl的整个客户区?CTabCtrl的客户区应该不包含标签吧?
主要相关的代码如下:

BOOL CInfoTabView::PreCreateWindow(CREATESTRUCT& cs)
{
// 更改CTabCtrl的标签位置在底部
cs.style |= TCS_FIXEDWIDTH | TCS_BOTTOM;
return CCtrlView::PreCreateWindow(cs);
}

void CInfoTabView::OnInitalUpdate()
{
// 设置CTabCtrl标签显示的初始内容
// ...

// 创建CEdit控件,并放置到合适的位置
CRect rect;
tab.GetClientRect(&rect);

CRect rect2;
tab.GetItemRect(0, &rect2); // 获取第一个标签的大小,主要是得到标签的高度
if (!m_pEdit->Create(ES_MULTILINE | ES_AUTOVSCROLL | WS_CHILD | WS_VISIBLE | WS_TABSTOP,
CRect(0, 0, rect.Width(), rect.Height() - rect2.Height()), &tab, 1))
AfxMessageBox(_T("Create Edit Failed!"));

// 显示信息,供调试用
CString str;
str.Format(_T(" rectangle (%d, %d) - (%d, %d), %d, %d\r\n")
_T("Item Rect (%d, %d) - (%d, %d), %d, %d\r\n")
_T("height = %d"),
rect.left, rect.top, rect.right, rect.bottom, rect.Width(), rect.Height(),
rect2.left, rect2.top, rect2.right, rect2.bottom, rect2.Width(), rect2.Height(),
rect.Height() - rect2.Height());
m_pEdit->SetWindowText(str);
}

它怎么就不能放到想放的地方去呢?
...全文
291 点赞 收藏 4
写回复
4 条回复
blldw 2008年03月06日
up!
回复 点赞
blldw 2008年03月06日
就是用CTabCtrl的GetItem方法来获得某一个标签的大小,因为每一个标签大小都一样,所以就可以减去这个大小,但是所得到的结果和用Spy++观察到的结果有出入,可能自己的理解有问题,我的代码都贴出来了,有谁能再解释一下吗?
回复 点赞
hityct1 2008年03月06日
你可以自己计算一下。CTabCtrl有个函数可以获得底部的标签的大小,具体记不清了。
减去这个大小不就行了。
回复 点赞
blldw 2008年03月05日
现在的问题是CEdit控件完全覆盖了CTabCtrl,包括其底部的标签。
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7973

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告