关于控件的showwindws显示有关问题

关于控件的showwindws显示问题
我自制了一个切换按钮,作用是在同一个窗口下,点击不同的按钮就将界面上的控件隐藏或移动位置。功能没问题,但我这里有个显示上的问题,我按钮是标题栏贴图,点击下去之后,按下左键,屏幕先显示一次背景,背景里什么也没有,松开后那些控件才会显示出来,这样会造成,点击切换按钮-》显示一次什么控件都没有的背景-》再显示控件。点快了就是闪烁,非常严重。
部分代码:
void CdemoDlg::OnNcLButtonDown(UINT nHitTest, CPoint point){
if (m_RectTitle_Tablectrl.PtInRect(point)&& TabPage !=1){  //!=1 is wrote to prevent program to draw again
TabPage = 1;  //tabpage是页面代号
InvalidateRect(CRect(m_rect_axial.left, m_rect_axial.top, m_dig_rect5.right+15, m_dig_rect2.bottom+20), TRUE);
InvalidateRect(CRect(1030, 150, 1270, 800), TRUE);  // 这两句都是将背景里的线擦除
previousBtn.ShowWindow(TRUE);
        GetDlgItem(IDC_EDIT1)->ShowWindow(TRUE);
}
page2 类似

点击左键它确实是执行了,功能没问题,就是显示控件前会插一个显示窗口的背景,造成闪烁。有啥好办法让控件直接显示而不刷新背景吗?感觉是这个ShowWindow函数闹的。如果能说下控件调用ShowWindow函数时,与之相关的消息的顺序就更好了
------解决思路----------------------
感觉还是思路上有问题。我也没觉得控件显示隐藏会有导致闪烁的问题。
你可以考虑修改一下背景刷新的方法。Invalidate不推荐。
------解决思路----------------------
放在绘图区中的控件在屏幕刷新时是会闪烁,除非你刷新时不刷新控件,网上可找到CDC中处理的方法。
我通常不将控件话绘图区,或将控件也通过图形绘制,再用设置控制区域的方法获取鼠标动作
------解决思路----------------------
因为你用了InvalidateRect,所以会调用OnEraseBkgnd

建议把InvalidateRect的第二个参数设为FALSE试试
------解决思路----------------------
父窗口 加上 WS_CLIPCHIDREN 看看