前言:本来今天想学着在VC++里插入图片的,结果这一弄就弄了一下午,终于有一点会了。这这是是一次艰难的学习经历。我看的是一本比较就的书《Visual C++ 面向对象与可视化程序设计》(第2版),下午刚开始照着书上的例子写代码的,结果,呜呜呜,貌似根本就不管用。书上插入位图用的是LoadBitmap()。当时我就郁闷了,到网上找资料,相关方面的资料也不是很多,要么就是MFC的,要么就是比较高深的图像处理的都没找到我想要的。找了好久,终于让我找到一个函数LoadImage()。照着网上的例子试了一下,终于成功了。好开心好开心啊。哈哈哈哈。希望这篇博文能给与那些向我一样的初学者一些帮助。废话不多说了。下面进入正题。
主要就是LoadImage的用法,如下(这是MSDN里的)
HANDLE LoadImage( HINSTANCE hinst, // handle to instance LPCTSTR lpszName, // image to load UINT uType, // image type int cxDesired, // desired width int cyDesired, // desired height UINT fuLoad // load options );
还有就是资源文件(位图文件)的插入,步骤如下:
1.新建资源脚本
2.建完之后效果如下:
3.出入位图,点击新建
.
4.画图并保存
5.添加头文件,如图
以上就是资源的插入了,接下来就到了代码的实现部分了
这是主要的代码,有注释:
#include
#include
#include
#include
#include "resource.h"
HDC hdcmem;//设备内存环境句柄
HBITMAP hbitmap;//位图句柄
BITMAP bitmap;//BITMAP结构
LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
WNDCLASS wndclass;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hInstance = hInstance;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszClassName = "我的窗口";
wndclass.lpszMenuName = NULL;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndclass); //注册窗口类
HWND hwnd;
hwnd = CreateWindow("我的窗口", "窗口", WS_OVERLAPPEDWINDOW,
0, 0, 1000, 600, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
MSG Msg;
while(GetMessage(&Msg, NULL, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return 0;
}
LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
HDC hdc;
PAINTSTRUCT ps;
HANDLE hb;
switch(uMsg)
{
case WM_CREATE:
hdc = GetDC(hwnd);
hdcmem = CreateCompatibleDC(hdc);//获取内存设备环境句柄
ReleaseDC(hwnd, hdc);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
hb = LoadImage(NULL, "bitmap2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hb, sizeof(BITMAP), &bitmap);
SelectObject(hdcmem, hb); //将位图选入内存设备
BitBlt(hdc, 10, 10, bitmap.bmWidth, bitmap.bmHeight, hdcmem, 0, 0, SRCCOPY);
EndPaint(hwnd, &ps);
DeleteObject(hb);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
DeleteDC(hdcmem);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
工程已经打包上传了,这是资源链接:http://download.csdn.net/detail/u010084308/6692547
基本上就是这样了。