如下的两个函数调用:
int n=pTabPage->GetItemCount();
CTabCtrl * pNextTabPage=(CTabCtrl*)pTabPage->GetNextDlgTabItem(pTabPage,FALSE);
我明明有三个Tab 属性页,pTabPage为第一个Tab 属性页的指针,为什么返回值总是为零啊,第二个函数为什么返回值pNextTabPage总是与pTabPage相同,而不是下一个属性页的指针啊?
大家教我

解决方案 »

  1.   

    GetItemCount()返回一直是0?这个我还真没用到,因为页面都是自己InsertItem()插进去的,多少页,外面自己保存过了。这个帮不了你。
    至于GetNextDlgTabItem()似乎是取下一个按了Tab键以后,焦点移动过去的控件的指针。不是你想到的取Tab页面的指针。使用函数错误。
    最后,VC下面Tab控件不管你有几页,实际上都是同一个HWND。一般来说VC下面用Tab实现换页比较常用的方法是嵌入几个子窗口,根据当前所处的页面(GetCurSel()返回值)决定哪一页可见,其它页不可见。
      

  2.   

    我新建了一个项目试了一下,GetItemCount()完全正确,LZ的GetItemCount()一直返回0的话,只有两种可能性:
    1、你没有插入任何页面。
    2、CTabCtrl指针找错了。没有CTabCtrl的创建和插入代码,我无法判断
      

  3.   

    我是在已知第一个属性页的指针pTabPage时,用函数int n=pTabPage->GetItemCount();的
    如果不对,那么应该怎么办呢?还有就是怎样才能获得下一个属性页的指针或句柄?
      

  4.   

    你是怎么取得第一个属性页的指针的?
    VC的Tab所有属性页的句柄都相同,没有这个属性页和下个属性页的概念。
      

  5.   

    我通过它的 Control ID 得到的,我通过SPY++看了  他们的Instance Handle相同,但是Window Handle不相同啊,而且我试了我获得的第一个属性页的句柄是对的
      

  6.   

    你需要对CTabCtrl对象调用GetItemCount()函数,而不是什么生造出来的什么第一个属性页。
    而GetNextDlgTabItem函数根本和Tab页无关,指的是窗口上Tab按键顺序。
    CTabCtrl::GetItemCount()
    CTabCtrl::GetItem()
      

  7.   

    ((CTabCtrl*)GetDlgItem(Tab控件ID))->GetItemCount()绝对是页数,Tab应该没有第几个属性页的概念,所以LZ的CTabCtrl*我想没有找错,不过LZ的你的页数是怎么插入的?有用InsertItem插入页数吗?是不是根本就还没插入,所以结果是0?
    至于CTabCtrl::GetItem()只能取得Tab上面的标签的一些信息,不能取到LZ要的HWND。
    LZ你说说你到底想要干什么吧,我个人感觉你把Tab控件的使用方法完全误解了,如果继续按照你的思路下去,是完成不了任务的。
      

  8.   

    谢谢了  我是第一次接触Tab属性页,我想我可能是把一些概念搞错了,当时用这些函数时,也只是看了下MSDN 全是英文,不完全理解。
    我试了下GetItemCount(),w_anthony() 说的确实是对的,至于GetNextDlgTabItem我还不太清楚,谢谢两位了,我自己再去照照资料