在网上看到了这样的代码:    CBitmap m_bmpBackground;    m_bmpBackground.LoadBitmap(IDB_BITMAPBACKGROUND);    CPaintDC dc(this); // device context for painting
    CRect rect;
    GetClientRect(&rect);
    CDC dcMem; 
    dcMem.CreateCompatibleDC(&dc); 
    BITMAP bitMap;
    m_bmpBackground.GetBitmap(&bitMap);
    CBitmap *pbmpOld=dcMem.SelectObject(&m_bmpBackground);
    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);我试了一下,发现是将背景图片放到了client上的,并不能将对话框的标题栏也覆盖掉,要是想用一个图片将标题栏和客户区都覆盖,应该如何是好?谢谢!

解决方案 »

  1.   

    标题栏属于非客户区,所以如果要覆盖标题栏,你需要重写WM_NCPAINT的处理
      

  2.   

    友情提示:
    没有标题、没有边框的窗口,ClientRect和WindowRect是一致的
      

  3.   

    向上面说的那样,这种情况下通常是自己写一个Frame类,不要标题和边框
      

  4.   

    把对话框的基类改成 windows
    使用向导添加 WM_NCPAINT 消息
    使用 GetWindowDC 直接获取整个窗口的DC
    使用该DC进行绘制就行了另外说一句,当系统消息来的时候,会还原系统部分的绘制
    你可以要处理一大堆的NC消息才能好一点..
      

  5.   

    我按照4楼的说法,处理了WM_NCPAINT消息,但是发现只是在第一次的运行时是可以的,切换到别的窗口再切回来,图片接加载不上了
    void CcaptionbarDlg::OnNcPaint()
    {
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CDialog::OnNcPaint()
    CDC *pdc = GetWindowDC();
    CDC memdc;
    memdc.CreateCompatibleDC(pdc);
    memdc.SelectObject(m_bit);
    pdc->BitBlt(0,0,m_bm.bmWidth,m_bm.bmHeight,&memdc,0,0,SRCCOPY);
    ReleaseDC(pdc);
    }
      

  6.   

    先把窗口样式改了,再截WM_NCHITTEST消息设置设置客户区,非客户区等
    那个对话框加图片,在网上有的,早不久见过
      

  7.   

    给楼主一个比较简单的方法: 
    1.在对话框属性里面把标题栏前面的钩去掉,这样就没有标题栏了,
    2.对话框设计界面里把边上的虚线拉到和对话框一样大
    3.设定对话框属性里面的边框样式,初始为"对话框架",改为无就没有了.
    4.在对话框上增加按钮1,2.增加点击消息分别用于响应对话框最小化(ShowWindow(SW_MINIMIZE))和关闭消息
    5.给对话框添加WM_LBUTTONDOWN消息,写入
    PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y)); CDialog::OnLButtonDown(nFlags, point);
    这样当你在对话框的任意位置点下左键,都可以拖动对话框
      

  8.   

    另外显示一个CWnd,只绘制图片就可以了,何必还用对话框呢
      

  9.   

    GetClientRect(&rect);
    应该换是GetWindowRect(&rect);才可以吧。客户区域是不包括标题栏的。
      

  10.   

    message==WM_MOVE||
    message==WM_PAINT||
    message==WM_NCPAINT||
    message==WM_NCACTIVATE||
    message == WM_NOTIFY
    在DefWindowProc处理这些消息,再调用绘图。
      

  11.   

    在resourceview里面,右键对话框属性,Styles标签下的Border设置成None.
      

  12.   

    不会,学习一下,可以考虑用界面库,貌似active skin不错