1.Invalidate()是使整个客户区无效,什么函数可以使非客户区无效???
2.在有Caption的Dialog中,系统什么时候画的关闭、最大化、最小化按钮.(如果那三个是按钮的话,用SPY++并不能看到他们,也有可能是普通的rect,本人愚见),有什么办法可以阻止系统不画右上角的三个东东!!

解决方案 »

  1.   

    很简单,你重写一个(CWnd)窗口类就可以了.
      

  2.   

    要使非客户区无效可以使用InvalidateRgn(HWND hWnd,HRGN hRgn,BOOL bErase)
      

  3.   

    添加WM_ONNCHITTEST()消息?
    此为非客户区消息,可以添加这个消息,在消息处理函数中什么也不做(把里面自动生成的屏蔽掉)。
      

  4.   

    还有其它办法吗?你们的都不灵啊
    系统还是依然该干什么干什么的,
    1.添加WM_NCHITEST,点caption不灵了,还有问题就是点了其它应用程序,再点任务栏上的我的应用程序时,caption依旧出来!!!
    2.我就是在重写窗口类啊,可不知道如何阻止系统重绘!!!
      

  5.   

    首先在OnNcPaint()中自己画标题栏,包括关闭、最大化、最小化
    然后
    void CTestDlg::OnNcMouseMove(UINT nHitTest, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    if(HTMAXBUTTON == nHitTest || HTMINBUTTON == nHitTest || HTCLOSE == nHitTest)
    return;
    CDialog::OnNcMouseMove(nHitTest, point);
    }BOOL CTestDlg::OnNcActivate(BOOL bActive) 
    {
    // TODO: Add your message handler code here and/or call default
    OnNcPaint();
    return TRUE;
    // return CDialog::OnNcActivate(bActive);
    }void CPlayListDlg::OnNcLButtonDown(UINT nHitTest, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    if(m_rtButtExit.PtInRect(point))
    {
    SendMessage(WM_CLOSE);
    return;
    }
             ...//关闭、最大化、最小化的功能自己处理
    if(HTMAXBUTTON == nHitTest || HTMINBUTTON == nHitTest || HTCLOSE == nHitTest)
    return;
    CDialog::OnNcLButtonDown(nHitTest, point);
    }
      

  6.   

    如何帮button移到Caption上,非客户区!!!