MFC中CTabCtrl 坐标问题~~ CTabCtrl中的Dialog 在 初始化 时 要 MoveWindow 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 子对话框Create的时候,MoveWindow到正确的位置,参考CTabCtrl的ClientRect区域 还想问一个ctabctrl的问题:封好的类内将create函数内的坐标参数的right, bottom 设置成0,这样做是不是为了能让子对话框类能充满客户区?同样的,当我拖放界面时发现子对话框的大小是固定的,即无论拉多大,右边永远是灰的, m_BsInfo.MoveWindow(rectL.left, rectL.top,(cx-27),(cy-40),1); 没有效果~~请问是什么原因~3Q 对于ctabctrl类不熟悉,就将就用了.对于4#的问题我发现ctabctrl的子控件cdialog的客户区的大小是固定的(660,420),这是什么原因呀? 要改“封装好的类”代码“CTabCtrl中的Dialog 在 初始化 时 要 MoveWindow” 我在onsize里MoveWindow,但是发现客户区不变,结果出现4楼的样子 “在onsize里” 看看代码? 封装的有问题。我最近也在搞CTabCtrl,后来看看不难,自己整一个很快的。我用的是WTL,不过原理一样的。我还增加了两个功能:1.单个Tab可以屏蔽,不让选择;2.我加了一个CTab关闭按钮,可以整个窗口关掉我建议你自己搞一个,我本来还想OwnrDraw自绘呢。这样可以使屏蔽的字体颜色灰掉,后来试了下有些麻烦。就不用了,没有灰掉就算了。范例的样子,刚搞完! tab一般是要内嵌对话框的你的应用放到这个对话框上你检查一下子对话框有没有问题也可以参考这篇文章http://blog.csdn.net/xianglitian/article/details/5618814 不管放哪里 , 对话框 一定要 MoveWindow到 Tab 的 客户区,即 取 Tab 客户区 大小 (GetPatent-》 GetClientRect MovwWindow) 我对MFC不太熟,我的思路是创建的时候用SetWindowPos设置两个子对话框的位置,然后关联ON_WM_SIZE信号,最后在ctabctrl,dialog中Onsize添加MoveWindow但是问题是即使我把界面拖放变大,控件会变大,但是客户区不变,结果控件给遮住了.(4楼有图)怎么才能让客户区变化?? 有没有关于ctabctrl自适应的文章呀 没看到你提及的封装类,不敢妄评。不过建议你去看看http://www.codeproject.com/Articles/2475/A-WTL-Tab-Control-for-Managing-Tab-Views里面的范例,里面有个 calc的函数void CTabPane::CalcViewRect(CRect* pRect){ GetClientRect( *pRect ); if (pRect->Height() > 0 && pRect->Width() > 0 ) { // Calculate the Height (or Width) of the tab . . . // cause it could be Multiline CRect theTabRect; GetItemRect( 0, &theTabRect ); LONG theRowCount = GetRowCount(); LONG theEdgeWidth = ( theTabRect.Width() * theRowCount ) + TABVIEW_EDGE; LONG theEdgeHeight = ( theTabRect.Height() * theRowCount ) + TABVIEW_EDGE; // Set the size based on the style DWORD dwStyle = GetStyle(); if ((dwStyle & TCS_BOTTOM) && !(dwStyle & TCS_VERTICAL)) { // Bottom (*pRect).top += TABVIEW_BORDER; (*pRect).left += TABVIEW_BORDER; (*pRect).right -= TABVIEW_BORDER; (*pRect).bottom -= theEdgeHeight; } else if ((dwStyle & TCS_RIGHT) && (dwStyle & TCS_VERTICAL)) { // Right (*pRect).top += TABVIEW_BORDER; (*pRect).left += TABVIEW_BORDER; (*pRect).right -= theEdgeWidth; (*pRect).bottom -= TABVIEW_BORDER; } else if (dwStyle & TCS_VERTICAL) { // Left (*pRect).top += TABVIEW_BORDER; (*pRect).left += theEdgeWidth; (*pRect).right -= TABVIEW_BORDER; (*pRect).bottom -= TABVIEW_BORDER; } else { // Top (*pRect).top += theEdgeHeight; (*pRect).left += TABVIEW_BORDER; (*pRect).right -= TABVIEW_BORDER; (*pRect).bottom -= TABVIEW_BORDER; } }}里面要紧的是GetItemRect( 0, &theTabRect ); //获取tab头部大小LONG theRowCount = GetRowCount();//有几个tabLONG theEdgeWidth = ( theTabRect.Width() * theRowCount ) + TABVIEW_EDGE;LONG theEdgeHeight = ( theTabRect.Height() * theRowCount ) + TABVIEW_EDGE;根据这些,可以判断你的头部大小,剩下的都是你的ClientRECT 我反正就是这么自适应的。 有没有关于ctabctrl自适应的文章呀自适应就是在OnSize中调整是不是TabCtrl不重要你可以参考http://blog.csdn.net/xianglitian/article/details/5667015 有没有关于ctabctrl自适应的文章呀自适应就是在OnSize中调整是不是TabCtrl不重要你可以参考http://blog.csdn.net/xianglitian/article/details/5667015我已经在其中一个dialog中改写了onsize,但是ctabctrl的客户区不变,导致被遮住了.现在这个问题解决不了.如果可能的话能看下代码么,我把代码传到github下了.位置:https://github.com/mxy0226/MAC_Manage或skydirver:http://sdrv.ms/1dCdwCi3Q~~ [email protected]我用下.先谢过了~~ VC 线程的问题 关于WINAPI标示符的疑问,初学 请教一个简单的CSocket问题!急! 除了自己加输出,还有别的方法得到Release版的函数调用顺序、参数及执行时间 请教windows窗口和视图的创建过程,先后调用哪些函数?? [SOS]如何把本地上的文件内容存到远程服务器上的oracle数据库中的某张表的blob字段? 菜鸟刚来,不知道这个问题可以用什么办法解决? ATL COM 菜问题:程序自动中断并显示汇编代码。怎么办? 一个关于HDIB句柄的问题 C++关于全局变量声明问题,急! vc++6.0安装ddk7.1的问题 如何获取当前已经联网的网卡(适配器)?
封好的类内将create函数内的坐标参数的right, bottom 设置成0,这样做是不是为了能让子对话框类能充满客户区?同样的,当我拖放界面时发现子对话框的大小是固定的,即无论拉多大,右边永远是灰的, m_BsInfo.MoveWindow(rectL.left, rectL.top,(cx-27),(cy-40),1);
没有效果~~
请问是什么原因~3Q
“CTabCtrl中的Dialog 在 初始化 时 要 MoveWindow”
我在onsize里MoveWindow,但是发现客户区不变,结果出现4楼的样子
1.单个Tab可以屏蔽,不让选择;
2.我加了一个CTab关闭按钮,可以整个窗口关掉我建议你自己搞一个,我本来还想OwnrDraw自绘呢。这样可以使屏蔽的字体颜色灰掉,后来试了下有些麻烦。就不用了,没有灰掉就算了。范例的样子,刚搞完!
你的应用放到这个对话框上
你检查一下子对话框有没有问题
也可以参考这篇文章
http://blog.csdn.net/xianglitian/article/details/5618814
即 取 Tab 客户区 大小 (GetPatent-》 GetClientRect MovwWindow)
我对MFC不太熟,我的思路是创建的时候用SetWindowPos设置两个子对话框的位置,
然后关联ON_WM_SIZE信号,最后在ctabctrl,dialog中Onsize添加MoveWindow但是问题是即使我把界面拖放变大,控件会变大,但是客户区不变,结果控件给遮住了.(4楼有图)
怎么才能让客户区变化??
没看到你提及的封装类,不敢妄评。不过建议你去看看http://www.codeproject.com/Articles/2475/A-WTL-Tab-Control-for-Managing-Tab-Views里面的范例,里面有个 calc的函数void CTabPane::CalcViewRect(CRect* pRect)
{
GetClientRect( *pRect ); if (pRect->Height() > 0 && pRect->Width() > 0 ) {
// Calculate the Height (or Width) of the tab . . .
// cause it could be Multiline CRect theTabRect;
GetItemRect( 0, &theTabRect ); LONG theRowCount = GetRowCount();
LONG theEdgeWidth = ( theTabRect.Width() * theRowCount ) + TABVIEW_EDGE;
LONG theEdgeHeight = ( theTabRect.Height() * theRowCount ) + TABVIEW_EDGE; // Set the size based on the style
DWORD dwStyle = GetStyle();
if ((dwStyle & TCS_BOTTOM) && !(dwStyle & TCS_VERTICAL)) { // Bottom
(*pRect).top += TABVIEW_BORDER;
(*pRect).left += TABVIEW_BORDER;
(*pRect).right -= TABVIEW_BORDER;
(*pRect).bottom -= theEdgeHeight;
}
else if ((dwStyle & TCS_RIGHT) && (dwStyle & TCS_VERTICAL)) { // Right
(*pRect).top += TABVIEW_BORDER;
(*pRect).left += TABVIEW_BORDER;
(*pRect).right -= theEdgeWidth;
(*pRect).bottom -= TABVIEW_BORDER;
}
else if (dwStyle & TCS_VERTICAL) { // Left
(*pRect).top += TABVIEW_BORDER;
(*pRect).left += theEdgeWidth;
(*pRect).right -= TABVIEW_BORDER;
(*pRect).bottom -= TABVIEW_BORDER;
}
else { // Top
(*pRect).top += theEdgeHeight;
(*pRect).left += TABVIEW_BORDER;
(*pRect).right -= TABVIEW_BORDER;
(*pRect).bottom -= TABVIEW_BORDER;
}
}}里面要紧的是
GetItemRect( 0, &theTabRect ); //获取tab头部大小
LONG theRowCount = GetRowCount();//有几个tab
LONG theEdgeWidth = ( theTabRect.Width() * theRowCount ) + TABVIEW_EDGE;
LONG theEdgeHeight = ( theTabRect.Height() * theRowCount ) + TABVIEW_EDGE;根据这些,可以判断你的头部大小,剩下的都是你的ClientRECT 我反正就是这么自适应的。
是不是TabCtrl不重要
你可以参考http://blog.csdn.net/xianglitian/article/details/5667015
是不是TabCtrl不重要
你可以参考http://blog.csdn.net/xianglitian/article/details/5667015我已经在其中一个dialog中改写了onsize,但是ctabctrl的客户区不变,导致被遮住了.现在这个问题解决不了.如果可能的话能看下代码么,我把代码传到github下了.位置:
https://github.com/mxy0226/MAC_Manage
或skydirver:
http://sdrv.ms/1dCdwCi3Q~~
我用下.先谢过了~~