用VS2010 要做一个多标签的程序。 没有用Tab控件,使用了自绘的按钮来响应。 在OnPaint函数里添加了设置子窗口位置的语句CRect rec;
GetWindowRect(&rec);
//定位选项卡页的位置
rec.bottom -= 20;
rec.left += 150;
rec.top += 110;
rec.right -= 10;
//将子页面移动到指定的位置
SetInfoTab.MoveWindow(&rec);
SetInfoTab.ShowWindow(SW_SHOW);运行后发现拖动窗口的时候子页面不会跟随着父窗口,停留在一个位置。就在OnPaint里添加了一句messagebox做测试,发现在拖动窗口的时候是不会弹出messagebox的!那岂不是说没响应OnPaint函数??  然后自己又在VC6里测试了一下,发现拖动窗口的时候是会响应OnPaint的,没问题。 以前一直都用VC6,最近才装了VS2010,搞不懂怎么回事。 如果是这样的话要怎么做多选项卡的程序呢...  就想了解下是怎么回事,谢谢!

解决方案 »

  1.   

    我又试着在响应OnMove的时候响应OnPaint,结果一运行就出错.... 但之前在VC6里也做过一样的操作,是没有问题的... 不知道怎么回事....
      

  2.   

    你为什么要在OnPaint里面设置窗口位置,这个本身就有问题。
      

  3.   

    这样才能保证拖动窗口的时候响应onpaint让子窗口始终在那个位置啊,tab标签不就是在onpaint里面设置子窗口位置吗?
      

  4.   

    这都哪跟哪啊
    你看看这篇文章
    http://blog.csdn.net/xianglitian/article/details/5667015
      

  5.   


    谢谢,你的文章我收藏了,还没想过拖拽的问题。可能是我用了第三方库的问题吧。 我之前用tab控件都是在onpaint里面设置子窗口位置的,这样每次拖动响应onpaint事件重新定位子窗口再显示,请问我这样做有什么问题吗? 
      

  6.   

    在拖动的时候,会发wm_paint消息,onpaint处理这个消息,显示当前最新位置
    可是你在onpaint里面又重新设置位置,所以,拖不走是正常的!
      

  7.   

    没问题,看看2010的tab属性和vc6的差别在哪儿