每天一问,是不可能的,提问怎么能不给分呢,分数有限啊,每天去混分然后来提问~~
    昨天弄懂了BITMAP和ICON的显示
         CDC *pDC=GetDC();
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(&bitmap);
pDC->BitBlt(x,y,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY); HICON icon; 
icon=AfxGetApp()->LoadIcon(IDI_ICON1);
DrawIcon(GetDC()->m_hDC,0,0,icon);
但一张位图做为对话框背景,然后要不停的刷新SetTimer(1,0,NULL);就会闪烁
另一张小的位图显示在背景之上,它遮挡的背景会是一个正方形,怎样让遮挡的背景只是位图的样子呢?使位图透明?
都怎样实现的呢~~
貌似图标是透明的-_-图标在位图之上能看到位图

解决方案 »

  1.   

    想要不闪烁,把窗口类背景刷子设为NULL
    位图透明,可以用掩模,也可以用transparentblt。
      

  2.   


    CPaintDC dc(this);
    CRect rc;
    GetClientRect(&rc);

    CBitmap bk;
    bk.LoadBitmap(IDB_BK);
    BITMAP bmp;
    bk.GetBitmap(&bmp);

    CDC memDC;
    memDC.CreateCompatibleDC(&dc);
    memDC.SelectObject(&bk);

    dc.StretchBlt(0, 0, rc.Width(), rc.Height(), &memDC, 0, 0, bmp.bmWidth,
    bmp.bmHeight, SRCCOPY);

    CBitmap bmpLogo;
    bmpLogo.LoadBitmap(IDB_LOGLOGO);
    bmpLogo.GetBitmap(&bmp);
    memDC.SelectObject(&bmpLogo);

    ::TransparentBlt(dc.m_hDC, 180, 20, bmp.bmWidth, bmp.bmHeight, memDC.m_hDC, 
    0, 0, bmp.bmWidth, bmp.bmHeight, RGB(214, 238, 255));
      

  3.   

    bk.LoadBitmap(IDB_BK);
    bmpLogo.LoadBitmap(IDB_LOGLOGO);
    都是装载位图资源ID,上面是位图原有ID吧
    那下面一个ID是什么?
      

  4.   

    两个ID换成一样,加入msimg32.lib后无错
    但运行会出错,显示错误,然后Cannot execute program
      

  5.   


    IDB_BK 是背景图片bmp 格式的
    IDB_LOGLOGO 是logo bmp 格式的是自己导入资源文件的。