使用C++绘制GDI位图的基本编写实例

1、加载位图

2、建立兼容DC

3、选择之前的位图对象

4、用贴图函数BitBlt()

HBITMAP bitmap=(HBITMAP)LoadImage(NULL,L"Name.bmp",IMAGE_BITMAP,high,length,LR_LOADFROMFILE);
HWND tmp=CreateCompatiable(g_hdc);
SelectObject(tmp,bitmap);
BitBlt(g_hdc,0,0,high,length,tmp,0,0,SRCCOPY);

Demo完整代码:

#include <windows.h>
#include <time.h> 

const int TAR_HIGH=800;
const int TAR_WEIGHT=600;
const wchar_t TAR_TITLE[]=L"致我们不磨灭的青春和理想-建大英雄传"; 

HDC g_hdc=NULL;
HDC g_mdc=NULL;
HBITMAP g_hbitmap=NULL; 

void Game_Paint(HWND hwnd)
{
  SelectObject(g_mdc,g_hbitmap);
  BitBlt(g_hdc,0,0,TAR_HIGH,TAR_WEIGHT,g_mdc,0,0,SRCCOPY);
} 

bool Game_Init(HWND hwnd)
{
  g_hdc=GetDC(hwnd);
  //在这里做初始化工作
  g_hbitmap=(HBITMAP)LoadImage(NULL,L"content.bmp",IMAGE_BITMAP,TAR_HIGH,TAR_WEIGHT,LR_LOADFROMFILE);
  //建立DC
  g_mdc=CreateCompatibleDC(g_hdc); 

  Game_Paint(hwnd);
  ReleaseDC(hwnd,g_hdc);
  return 1;
} 

bool Game_Clear(HWND hwnd)
{
  DeleteObject(g_hbitmap);
  DeleteDC(g_mdc);
  return 1;
} 

LRESULT CALLBACK SdjzuProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  switch(message)
  {
    PAINTSTRUCT paintstruct;
  case WM_PAINT:
    //新增设备环境句柄调用
    g_hdc=BeginPaint(hwnd,&paintstruct);
    Game_Init(hwnd);
    EndPaint(hwnd,&paintstruct);
    ValidateRect(hwnd,NULL);
    break;
    case WM_KEYDOWN:
      if(wParam=VK_ESCAPE)
      DestroyWindow(hwnd);
      break;
  case WM_DESTROY:
    PostQuitMessage(0);
    break;
  default:
    return DefWindowProc(hwnd,message,wParam,lParam);
  }
  return 0;
} 

int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{
  WNDCLASSEX wndclass={0};
  wndclass.cbSize=sizeof(WNDCLASSEX);
  wndclass.style=CS_HREDRAW|CS_VREDRAW;
  wndclass.lpfnWndProc=SdjzuProc;
  wndclass.cbClsExtra=0;
  wndclass.cbWndExtra=0;
  wndclass.hInstance=hInstance;
  wndclass.hIcon=(HICON)::LoadImage(NULL,L"tarico.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
  wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
  wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
  wndclass.lpszMenuName=NULL;
  wndclass.lpszClassName=L"sdjzuhero"; 

  //注册窗口 

  if(!RegisterClassEx(&wndclass))
    return -1;
  HWND hwnd=CreateWindow(L"sdjzuhero",TAR_TITLE,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,TAR_HIGH,TAR_WEIGHT,NULL,NULL,hInstance,NULL);//第三个参数控制了窗口的样式,合集为WS_OVERLAPPEDWINDOW
  MoveWindow(hwnd,250,80,TAR_HIGH,TAR_WEIGHT,true);
  ShowWindow(hwnd,nShowCmd);
  UpdateWindow(hwnd); 

  //载入报错模块 

  MSG msg={0};
  while(msg.message!=WM_QUIT)
  {
    if(PeekMessage(&msg,0,0,0,PM_REMOVE))
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
  } 

  UnregisterClass(L"sdjzuhero",wndclass.hInstance); 

  return 0;
}

刚开始试了几次没有成功,发现是在WndProc里对函数的调用出错了,没有执行init部分,改成init之后问题解决。看来与ACM一样,不能唯别人的模板是从,还是应该理解后加以修改,以更好的利用。

(0)

相关推荐

  • Visual C++程序设计中Windows GDI贴图闪烁的解决方法

    本文实例讲述了Visual C++程序设计中Windows GDI贴图闪烁的解决方法.分享给大家供大家参考.具体如下: 一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁. 先来谈谈闪烁产生的原因 原因一: 如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕 上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期. 一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的. 这样

  • VC中使用GDI+的配置方法概述

    本文以Visual C++ 6.0及Visual Studio 2003为例简述了VC中GDI的配置方法,具体操作如下: 一.对于Visual C++ 6.0的用户: 1. 下载GDI+的库.运行GDI+需要一个GdiPlus.dll的文件; 开发GDI+的程序,还需要GdiPlus.lib和GdiPlus*.h文件.这些都可以在微软的网站上下到.(具体搜一下windows sdk就都出来了) 2. 将以上的文件放在你的工程中的一个目录,然后在stdafx.h中包含#include "GdiPl

  • VC编程控件类HTControl之CHTGDIManager GDI资源管理类用法解析

    本文主要介绍了VC编程控件类HTControl的CHTGDIManager GDI资源管理类用法,MFC提供的CBitmap类的LoadBitmap接口只能从EXE内部获取位图,但是很多情况下需要从EXE外部获取,CHTGDIManager类提供了从EXE外部获取位图的接口,使用方法如下: m_hBmpBtnCloseNormal = m_HTGDIManager.GetBitmap(_T(".\\pic\\btn_close_normal.png")); #if !defined(_

  • 使用C++绘制GDI位图的基本编写实例

    1.加载位图 2.建立兼容DC 3.选择之前的位图对象 4.用贴图函数BitBlt() HBITMAP bitmap=(HBITMAP)LoadImage(NULL,L"Name.bmp",IMAGE_BITMAP,high,length,LR_LOADFROMFILE); HWND tmp=CreateCompatiable(g_hdc); SelectObject(tmp,bitmap); BitBlt(g_hdc,0,0,high,length,tmp,0,0,SRCCOPY);

  • html+js+highcharts绘制圆饼图表的简单实例

    实例如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type&q

  • matplotlib绘制符合论文要求的图片实例(必看篇)

    最近需要将实验数据画图出来,由于使用python进行实验,自然使用到了matplotlib来作图. 下面的代码可以作为画图的模板代码,代码中有详细注释,可根据需要进行更改. # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['Arial'] #如果要显示中文字体,则在此处设为:SimHei plt.rcParams['axes.un

  • js封装成插件_Canvas统计图插件编写实例

    之前就说过,我想写一个canvas画统计图的插件,现在写好了 先说下实现的功能吧: 1.可以通过自定义X轴坐标属性和Y轴坐标属性按比例画出统计图 2.可以选择画折现图还是柱形统计图,或者两者都实现 3.可以自由定义折现颜色,坐标颜色,柱形图颜色 和canvas边框颜色,当然边框你也可以选择要或者不要 4.可以选择是否实现柱形图和折现图的动画实现 实现过程 画坐标--画箭头--做X轴和Y轴的标注--画柱形图--画折现图 话不多说,上代码 (function(window,document){ va

  • Python+matplotlib绘制不同大小和颜色散点图实例

     具有不同标记颜色和大小的散点图演示. 演示结果: 实现代码: import numpy as np import matplotlib.pyplot as plt import matplotlib.cbook as cbook # Load a numpy record array from yahoo csv data with fields date, open, close, # volume, adj_close from the mpl-data/example directory

  • python绘制直方图和密度图的实例

    对于pandas的dataframe,绘制直方图方法如下: //pdf是pandas的dataframe, delta_time是其中一列 //xlim是x轴的范围,bins是分桶个数 pdf.delta_time.plot(kind='hist', xlim=(-50,300), bins=500) 对于pandas的dataframe,绘制概率密度图方法如下: //pdf是pandas的dataframe, delta_time是其中一列 pdf.delta_time.dropna().pl

  • Python绘制全球疫情变化地图的实例代码

    目前全球疫情仍然比较严重,为了能清晰地看到疫情爆发以来至现在全球疫情的变化趋势,我绘制了一张疫情变化地图. 废话不多说,先上图 下面就来重点介绍下上面这张图的绘制过程,主要分为以下三个步骤: 数据收集 数据处理 画图 下面一个一个来说. 数据收集 这是万里长城的第一步,俗话说"巧妇难为无米之炊",既然是变化图,当然需要每个国家.每天的现有确诊病例数.好在现在各大网站都有疫情相关的专题页,我们可以直接抓数据.以网易为例 我们选择 XHR,重新刷新下网页可以看到有几个接口,其中 list-

  • python 瀑布线指标编写实例

    我就废话不多说了,大家还是直接看代码吧! # -*- coding: utf-8 -*- """ Created on Tue May 23 08:57:02 2017 @author: yunjinqi E-mail:yunjinqi@qq.com Differentiate yourself in the world from anyone else. """ import pandas as pd import numpy as np im

  • Python使用pyecharts绘制世界地图,省级地图,城市地图实例详解

    目录 1.世界地图绘制演示 ① 世界地图数据准备 ② 世界地图生成 2.省份(河北省)地图绘制演示 ① 省份地图数据准备 ② 省份地图生成 3.城市(承德市)地图绘制演示 ① 城市地图数据准备 ② 城市地图生成 1.世界地图绘制演示 先给大家看下效果图哈. ① 世界地图数据准备 地图数据如下: 因为是世界地图,所以对标的国家,我设置了 2 组,里面的数据是随机生成的. # -*- coding:utf-8 -*- # 2022-2-14 # 作者:小蓝枣 # pyecharts地图 # 需要引用

  • 一个.net 压缩位图至JPEG的实例代码

    首先准备一张位图图像source.bmp,将它保存在bmp.aspx同一目录中 复制代码 代码如下: <%@ Page language="c#" %>     <%@ Import Namespace="System.Drawing" %>     <%@ Import Namespace="System.Drawing.Imaging" %> <script language="c#&quo

随机推荐