GDI导入位图并在位图上添加文本、描点、绘线

刚开始把位图导入资源文件中并修改ID为IDB_BACK
1、首先定义全局变量
HBITMAP hbmpBack = NULL;
2、在函数BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)加载位图
在HWND hWnd;后添加
hbmpBack = ::LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BACK));//new
3、在LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)中的case WM_PAINT:写入代码:
{
		hdc = BeginPaint(hWnd, &ps);//获得目标DC的句柄
		// TODO:  在此添加任意绘图代码...
		HDC hDCMem = ::CreateCompatibleDC(hdc); //创建与目标DC兼容的句柄
		HBITMAP hOldBmp = (HBITMAP)::SelectObject(hDCMem, hbmpBack);//将位图句柄选入到临时内存DC中
		BITMAP bmp;
		::GetObject(hbmpBack, sizeof(BITMAP), &bmp);
		//::BitBlt(hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, hDCMem, 0, 0, SRCCOPY);//使用BitBlt函数将临时内存DC中的位图拷贝到目标DC中
		RECT rcClient;
		::GetClientRect(hWnd, &rcClient);
		int nWidth = rcClient.right - rcClient.left;
		int nHeight = rcClient.bottom - rcClient.top;
		::StretchBlt(hdc, 0, 0, nWidth, nHeight, hDCMem, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
		::SelectObject(hDCMem, hOldBmp);//从位图句柄选出临时内存DC
		::DeleteDC(hDCMem);//销毁临时内存的DC

		LOGFONT logfont;
		memset(&logfont, 0, sizeof(logfont));
		logfont.lfWeight = 100;
		logfont.lfHeight = 50;
		logfont.lfCharSet = GB2312_CHARSET;
		_tcscpy(logfont.lfFaceName, _T("宋体"));

		HFONT hfont = CreateFontIndirect(&logfont);
		HFONT hOldFont = (HFONT)::SelectObject(hdc, hfont);

		COLORREF clrOldText = ::SetTextColor(hdc, RGB(0, 0, 128));
		::SetBkMode(hdc, TRANSPARENT);

		wstring str = L"VC知识库网站流量统计报表";
		DrawText(hdc, str.c_str(), (int)str.length(), &rcClient, DT_CENTER | DT_TOP | DT_SINGLELINE);

		::SelectObject(hdc, hOldFont);
		::DeleteObject(hfont);

		::SetTextColor(hdc, clrOldText);

		TextOut(hdc, 5, 100, _T("7000"), 4);
		TextOut(hdc, 5, 130, _T("6000"), 4);
		TextOut(hdc, 5, 160, _T("5000"), 4);
		TextOut(hdc, 5, 190, _T("4000"), 4);
		TextOut(hdc, 5, 220, _T("3000"), 4);
		TextOut(hdc, 5, 250, _T("2000"), 4);
		TextOut(hdc, 5, 280, _T("1000"), 4);
		TextOut(hdc, 106, 323, _T("1月"), 2);
		TextOut(hdc, 182, 323, _T("2月"), 2);
		TextOut(hdc, 250, 323, _T("3月"), 2);

		TextOut(hdc, 5 + 380, 100, _T("7000"), 4);
		TextOut(hdc, 5 + 380, 130, _T("6000"), 4);
		TextOut(hdc, 5 + 380, 160, _T("5000"), 4);
		TextOut(hdc, 5 + 380, 190, _T("4000"), 4);
		TextOut(hdc, 5 + 380, 220, _T("3000"), 4);
		TextOut(hdc, 5 + 380, 250, _T("2000"), 4);
		TextOut(hdc, 5 + 380, 280, _T("1000"), 4);
		TextOut(hdc, 106 + 380, 323, _T("1月"), 2);
		TextOut(hdc, 182 + 380, 323, _T("2月"), 2);
		TextOut(hdc, 250 + 380, 323, _T("3月"), 2);
		
		TextOut(hdc, 700, 325, _T("4月"), 2);

		TextOut(hdc, 125, 700, _T("访问群体"), 4);
		TextOut(hdc, 525, 700, _T("学习等级"), 4);

		//画左侧网格线

		MoveToEx(hdc, 54, 104, NULL);
		LineTo(hdc, 346, 104);

		MoveToEx(hdc, 54, 134, NULL);
		LineTo(hdc, 346, 134);

		MoveToEx(hdc, 54, 164, NULL);
		LineTo(hdc, 346, 164);

		MoveToEx(hdc, 54, 194, NULL);
		LineTo(hdc, 346, 194);

		MoveToEx(hdc, 54, 224, NULL);
		LineTo(hdc, 346, 224);

		MoveToEx(hdc, 54, 254, NULL);
		LineTo(hdc, 346, 254);

		MoveToEx(hdc, 54, 284, NULL);
		LineTo(hdc, 346, 284);

		MoveToEx(hdc, 54, 314, NULL);
		LineTo(hdc, 346, 314);

		MoveToEx(hdc, 54, 73, NULL);
		LineTo(hdc, 54, 315);

		MoveToEx(hdc, 123, 73, NULL);
		LineTo(hdc, 123, 315);

		MoveToEx(hdc, 192, 73, NULL);
		LineTo(hdc, 192, 315);

		MoveToEx(hdc, 261, 73, NULL);
		LineTo(hdc, 261, 315);

		//画折线
		HPEN hPen = CreatePen(PS_SOLID, 1, RGB(42, 187, 203));
		HPEN hPenOld = (HPEN)SelectObject(hdc, hPen);
		MoveToEx(hdc, 78, 315, NULL);
		LineTo(hdc, 150, 170);
		LineTo(hdc, 182, 239);
		LineTo(hdc, 250, 140);
		SelectObject(hdc, hPenOld);
		DeleteObject(hPen);
		
		EndPaint(hWnd, &ps);
	}


转载于:https://my.oschina.net/u/2480857/blog/552516

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值