从FrameWnd派生的窗口带有Splitter,需要自己定义一个标题栏,标题栏的高度比普通的要矮些,而且标题栏的背景需要自己图片绘制.困扰好多天了,现在项目一直在催,急需大家帮忙解决!!!

解决方案 »

  1.   

    问题是我的窗口客户区有splitter,不能在窗口内直接绘制一个窗口来模拟的.需要在非客户区进行绘制啊.
    有人对非客户区绘制比较熟悉吗?
    做法类似工具条的做法吧,不会占用客户区的.
      

  2.   

    响应WM_NCCALCSIZE消息,增加客户区矩形的top值。
      

  3.   

    楼上cnzdgs 能不能再具体些啊?最好能写点代码的例子吧?
    我在自己手动加入该消息在CFrameWnd的派生类面时,给变量赋值时出现异常,不知道具体怎么处理?
      

  4.   

    void CChildFrame::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) 
    {
    if(NULL != lpncsp)
    {
    if(NULL != lpncsp->lppos)
    lpncsp->lppos->y =60;
    }


    CMDIChildWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
    }这是我的做法但是不起作用啊?
      

  5.   

    void CChildFrame::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) 
    {         if(NULL != lpncsp)
    {
    if(NULL != lpncsp->lppos)
    {
         pncsp->rgrc->top =30; }
    }
    }
    }
    找到了这个方法,但是窗口改变大小后,非客户区绘制刷新就会出问题了?
    怎么样在非客户区绘制和刷新啊?最好给出例子代码吧?
      

  6.   

    void CChildFrame::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
    {
        CMDIChildWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
        lpncsp->rgrc[0].top += 30;
    }
    响应WM_NCPAINT消息,用CWindowDC对象绘制非客户区。