//相关资料说明,不要觉得多,问题很短。
在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中,
在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中,
解决方案 »
- CDHtmlDialog访问框架jsp网站
- 现在看VC++越看越顺眼了!
- LookupAccountName 返回错误1332
- sql语句,帮忙看看呗?多谢!
- 新手使用bcg库,总是链接报错,为什么?
- DirectShow设置输出图像大小
- 一个\n的问题:
- 请问怎样可以让程序启动的时候从完全透明逐渐变到不透明???
- 我用VC出错这是啥原因?????Compiling... Error spawning cl.exe
- 请教关于PNG读取与显示的问题
- ListCtrl怎样与SQL2000连接,并能够动态的实现数据的增、删、改操作
- 谁有用VC编写的程序编辑器的代码,要求不同的关键字能够自动使用不同的颜色或字体现显示,谢了!
所以,你用::LoadBitmap,和CBitmap::LoadBitmap都可以半载位图资源,因为后者本身就是调用前者完成的.
CDC::BitBlt也是调用::BitBlt完成的.
系统API调用中需要的HDC, HBITMAP,都在CDC.m_hDC和CBitmap::m_hBitmap中保存,而且这两个MFC类都提供了方法或者用运算符重载自动转换.