小弟这几天刚学MFC,碰到一个问题,,就是cbitmap这个类不能加载JPG,PNG这些格式只能加载bmp格式的图片么,,还有就是自绘按钮,,我想用PNG来贴图,,但不知道怎么加载这种格式的只能用bmp,,但这样就没了我要的透明,,求指导

解决方案 »

  1.   

    定义一个按钮类用GDI+ 画,再绑定实体按钮
      

  2.   

    http://www.codeproject.com/Articles/26887/A-user-draw-button-that-supports-PNG-files-with-tr看看这个吧!
      

  3.   

    PNG图片用GDI+来加载, 使用GDI+需要:
    1. 包含GdiPlus.h头文件, 和引用GdiPlus.lib库
    2. 应用程序初始化的时候调用GDI+的初始化函数GDI+有个类Bitmap, 可以从文件, 资源, 流加载图片, 可以用GetHBitmap将图片转换为BITMAP格式(带有ALPHA值)另外只用GDI的话, 去了解下AlphaBlend和TransparentBlt两个函数
      

  4.   

    用CImage类即可,可以处理JPG,PNG格式图片。
    #include <atlimage.h>//包含头文件
    void XXXX类::OnPaint(CDC* /*pDC*/)
    {
    .............................//下面是贴图代码        char path[256];
    GetCurrentDirectory(256,path);
    CString filepath = path;
    filepath += "\\res\\19.JPG";//你的JPG图片全路径
    image.Load(filepath);
    HBITMAP hBitmap=image.Detach();
    CBitmap bmp;
    bmp.Attach(hBitmap);
            //对单文档项目适用
    CMainFrame* pframe = (CMainFrame*)AfxGetApp()->m_pMainWnd;
    CImgTestView* pview = (CImgTestView*)pframe->GetActiveView();
    CDC* pdc = pview->GetDC();

    CDC memdc;
    memdc.CreateCompatibleDC(pdc);
    memdc.SelectObject(&bmp);
    pdc->BitBlt(0,0,3000,3000,&memdc,0,0,SRCCOPY);//贴图,尺寸自定
    memdc.DeleteDC();
    bmp.DeleteObject();        .............................
    }