对话框如何添加背景图??

解决方案 »

  1.   

    如何设置窗口背景图
    问题是这样产生的.在OnEraseBkGnd中,如果你不调用原来缺省 
    的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面, 
    由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd 
    函数,这时就和窗口缺省的背景刷相关了.缺省的 
    OnEraseBkGnd操作使用窗口的缺省背景刷刷新背景(一般情况 
    下是白刷),而随后你又自己重画背景造成屏幕闪动. 
    另外一个问题是OnEraseBkGnd不是每次都会被调用的.如果你 
    调用Invalidate的时候参数为TRUE,那么在OnPaint里面隐含 
    调用BeginPaint的时候就产生WM_ERASEBKGND消息,如果参数 
    是FALSE,则不会重刷背景. 
     
    所以解决方法有三个半: 
    1.用OnEraseBkGnd实现,不要调用原来的OnEraseBkGnd函数. 
    2.用OnPaint实现,同时重载OnEraseBkGnd,其中直接返回. 
    3.用OnPaint实现,创建窗口时设置背景刷为空 
    4.用OnPaint实现,但是要求刷新时用Invalidate(FALSE)这样 
    的函数.(不过这种情况下,窗口覆盖等造成的刷新还是要闪一 
    下,所以不是彻底的解决方法) 
    都挺简单的
      

  2.   

    定义CBitmap        bmpBackground;
    在OnInitDialog()中加
    bmpBackground.LoadBitmap(IDB_BACKGROUND);//IDB_BACKGROUND是你自己的图对应的ID 
    再OnPaint()中加上如下代码:
    CPaintDC  dc(this); 
    CRect  rect; 
    GetClientRect(&rect); 
    CDC  dcMem; 
    dcMem.CreateCompatibleDC(&dc);  BITMAP  bitmap; 
    bmpBackground.GetBitmap(&bitmap); 
    CBitmap  *pbmpOld=dcMem.SelectObject(&bmpBackground); 
    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
      

  3.   

    要求不高的情况可以使用Picture控件,简单迅捷。
    1、向对话框中拖入Picture控件
    2、导入做为背景的位图,ID不妨为:IDB_BACKGROUND
    3、选择Picture控件,修改其属性,类型改为Bitmap,Image下拉框中选择IDB_BACKGROUND
    4、调整适合的尺寸。OK了。