//相关资料说明,不要觉得多,问题很短。
在Windows中可以将预先准备好的图像复制到显示区域中,这种内存拷贝执行起来是非常快的。在Windows中提供了两种使用图形拷贝的方法:通过设备相关位图(DDB)和设备无关位图(DIB)。
DDB可以用MFC中的CBitmap来表示,而DDB一般是存储在资源文件中,在加载时只需要通过资源ID号就可以将图形装入。BOOL CBitmap::LoadBitmap( UINT nIDResource )可以装入指定DDB,但是在绘制时必须借助另一个和当前绘图DC兼容的内存DC来进行。通过CDC::BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop )绘制图形,同时指定光栅操作的类型。BitBlt可以将源DC中位图复制到目的DC中,其中前四个参数为目的区域的坐标,接下来是源DC指针,然后是源DC中的起始坐标,由于BitBlt为等比例复制,所以不需要再次指定长宽,(StretchBlt可以进行缩放)最后一个参数为光栅操作的类型,可取以下值: 
//***********问题说明**************//
现在需要   HBITMAP g_hbmBall;  g_hbmBall = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));其中必须含程序的句柄,如把此操作包装成DLL,则会出错,因应用程序句柄出错,如果采用DDB方式装入位图资源bmpDraw.LoadBitmap(ID_BMP);//装入DDB,但其对应的必须是CDC方式,
问题,是否可以在DLL中装入图标资源供其他程序调用,目标DC必须是HDC。 g_hbmBall = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BALL));
        HDC hdc = BeginPaint(hwnd, &ps);
        HDC hdcMem = CreateCompatibleDC(hdc);
        HBITMAP hbmOld = SelectObject(hdcMem, g_hbmBall);
        GetObject(g_hbmBall, sizeof(bm), &bm);
        BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
        SelectObject(hdcMem, hbmOld);
        DeleteDC(hdcMem);
        EndPaint(hwnd, &ps);
主要想把DLL中的位图资源画在HDC中,

解决方案 »

  1.   

    此DLL必须为非VC的环境中调用。
      

  2.   

    MFC只是SDK的封装.任何MFC类中的实现都可以只调用API就能实现,包括CDC.
    所以,你用::LoadBitmap,和CBitmap::LoadBitmap都可以半载位图资源,因为后者本身就是调用前者完成的.
    CDC::BitBlt也是调用::BitBlt完成的.
    系统API调用中需要的HDC, HBITMAP,都在CDC.m_hDC和CBitmap::m_hBitmap中保存,而且这两个MFC类都提供了方法或者用运算符重载自动转换.
      

  3.   

    My God! too terrible a question!