在GDI中使用图片资源需要需要以下的步骤:
- 从文件中加载图片到(BITMAP)对象里
- 建立一个余窗口DC兼容的内存DC
- 内存DC使用步骤1的对象
- 把内存DC内容粘贴到窗口DC里
步骤1:
使用LoadImage函数读取图像。
HBITMAP hbmp; //定义一个HBITMAP变量
hbmp = (HBITMAP)LoadImage(NULL, "r_map.bmp", IMAGE_BITMAP, 600, 450, LR_LOADFROMFILE);//读取r_map.bmp到hbmp里
步骤2:
建立与窗口DC兼容的内存DC。
内存DC不是真正的设备DC,可以说他是一个缓冲区,win里不允许直接上窗口DC里写入,只能通过内存DC粘贴到窗口DC里。
HDC mdc;//定义内存DC
mdc = CreateCompatibleDC(hdc); //填入窗口DC即可
步骤3:
选用内存贴图
这一步把我们读取的图片对象(HBITMAP)复制到内存DC里。
SelectObject(mdc,hbmp);
步骤四:
贴图,把内存DC中的位图复制显示到DC上,这个操作被称为 “贴图”。贴图中使用的函数是BitBlt()
BitBlt(hdc, 50, 50, 350, 250, mdc, 200, 100, SRCCOPY);
BitBlt函数参数有必要说下,是这样的。
BitBlt(目标dc, 目标dc x坐标, 目标dc y坐标, 贴到的宽度, 贴到的高度, 内存DC, 内存DC X坐标, 内存DC Y坐标, SRCCOPY);

放一下全部的代码:
BOOL InitInstance(HINSTANCE hinstance)
{
HWND hwnd;
HDC hdc;
HDC bufdc;
if (!(hwnd = CreateWindowEx(NULL,
"WINCLASS1", //winclass.lpszClassName设置的字符,是类的别名。
"YouWindows", //窗口的名称
WS_OVERLAPPEDWINDOW | WS_VISIBLE, //一些窗口属性
0, 0, //窗口位置
600, 450, //窗口宽高
NULL, //父窗口句柄
NULL, //附属窗口句柄
hinstance, //WinMain第一个实参,程序句柄。
NULL //null就可以了
)))
return false;
hdc = GetDC(hwnd); //获得窗口DC
mdc = CreateCompatibleDC(hdc); //创建于窗口DC匹配的内存DC
hbmp = (HBITMAP)LoadImage(NULL, "r_map.bmp", IMAGE_BITMAP, 800, 600, LR_LOADFROMFILE); //读取图片
SelectObject(mdc, hbmp);//把图片写入到内存dc里
MyPaint(hdc);//调用一下绘图函数
return true;
}
void MyPaint(HDC hdc)
{
BitBlt(hdc, 0, 0, 800, 600, mdc, 0, 0, SRCCOPY); //贴图到内存dc
}
效果如下

1万+

被折叠的 条评论
为什么被折叠?



