详细注释的源代码如下
#include "stdafx.h"
#include "atlimage.h"
//全局变量声明
HINSTANCE hInst;
HBITMAP bg; //声明一个位图对象,用于存储背景图
HDC mdc; //声明一个内存DC"mdc",用来暂存位图
//全局函数声明
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void MyPaint(HDC hdc);
////****Winmain函数,程序入口点函数**************************************
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
//消息循环
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//****设计一个窗口类,类似填空题,使用窗口结构体*************************
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wcex.hCursor = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "canvas";
wcex.hIconSm = NULL;
return RegisterClassEx(&wcex);
}
//****初始化函数*************************************
// 1.建立与窗口DC兼容的内存DC
// 2.从文件加载背景图及透明的洋葱头
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
HDC hdc;
hInst = hInstance;
hWnd = CreateWindow("canvas", "浅墨的绘图窗口" , WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
MoveWindow(hWnd,10,10,600,444,true);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
hdc = GetDC(hWnd); //获得窗口DC
mdc = CreateCompatibleDC(hdc); //创建与窗口兼容的内存DC(mdc)
bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,600,444,LR_LOADFROMFILE);
MyPaint(hdc);
ReleaseDC(hWnd,hdc);
return TRUE;
}
//****自定义绘图函数*********************************
//透明贴图
void MyPaint(HDC hdc)
{
SelectObject(mdc,bg);
BitBlt(hdc,0,0,600,450,mdc,0,0,SRCCOPY); //先将背景图贴到显示窗口中
CImage image; //定义一个CImage对象,用于透明贴图
CString str; //定义一个CString对象,用于存放文件名字符串
str="onion.png"; //将字符串赋值为文件名
image.Load(str); //在image中载入图像文件
image.Draw(hdc,120,180,85,113,0,0,85,113); //调用Draw进行透明贴图
//或者为image.TransparentBlt(hdc, 120, 180, 85, 113,CLR_INVALID );//调用TransparentBlt进行透明贴图
image.Destroy();
}
//****消息处理函数**********************************
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT: //窗口重绘消息
hdc = BeginPaint(hWnd, &ps);
MyPaint(hdc);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY: //窗口结束消息
DeleteDC(mdc);
DeleteObject(bg);
PostQuitMessage(0);
break;
default: //其他消息
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
相关推荐
【Visual C++】游戏开发笔记之四——游戏画面绘图(一)基本图形绘制-附件资源
【Visual C++ 游戏开发笔记之六——游戏画面绘图(三)透明特效的制作方法】 在游戏开发中,创建具有透明效果的游戏画面是提升游戏视觉质量的关键。在本文中,我们将探讨如何使用Visual C++实现透明特效,特别是...
【Visual C++】游戏开发笔记之六-游戏画面绘图(三)透明特效的制作方法主要探讨了如何在2D游戏中实现透明效果。透明效果在游戏画面中至关重要,它可以使得游戏元素与背景融合,提高视觉体验。在本教程中,作者毛星云...
【Visual C++】游戏开发笔记4主要探讨了使用GDI(图形设备接口)进行游戏画面绘图的基础知识。GDI是Windows API中的一个重要组件,负责管理所有显像设备的图像显示和输出。本文将深入介绍如何利用GDI进行游戏画面的...
【Visual C++】游戏开发笔记二十 游戏基础物理建模(二) 重力系统的模拟 本篇笔记主要探讨了如何在游戏开发中模拟重力系统,为游戏中的物体运动提供更逼真的效果。作者毛星云通过一个简单的平抛运动示例,解释了如何...
在Visual C++环境中,游戏编程涉及许多技术,其中之一就是透明动画的实现。本文将深入探讨如何使用Visual C++来创建具有透明效果的动画,这对于创建复杂的2D或3D游戏场景至关重要。 首先,透明动画的核心在于Alpha...
博文的配套源码 《【Visual C++】游戏开发笔记之十四 游戏画面绘图(四) 华丽的CImage类 》 ,原文地址为http://blog.csdn.net/zhmxy555/article/details/7422922, 源码编译环境为vs2010. 我的博客地址是...
在游戏开发中,单一背景滚动是一项基础且重要的技术,它为玩家创造了一个动态的游戏环境,使得游戏场景在屏幕上的移动显得更加生动和自然。在【Visual C++】中实现这一功能,可以为初学者提供宝贵的编程经验,同时也...
### Visual C++ 学习笔记:动态控件管理与调整 在进行Visual C++应用程序开发时,经常会遇到需要动态创建或调整控件的情况。本文档将详细介绍如何通过使用`EnableWindow`、`ShowWindow`、`MoveWindow`及`...
博文的配套源码 《【Visual C++】游戏开发笔记之六——游戏画面绘图(三)透明特效的制作方法》 ,原文地址为http://blog.csdn.net/zhmxy555/article/details/7338082, 源码编译环境为vs2010. 我的博客地址是...
博文的配套源码 《【Visual C++】游戏开发笔记之五——游戏画面绘图(二)绘制位图》 ,原文地址为http://blog.csdn.net/zhmxy555/article/details/7335103, 源码编译环境为vs2010. 我的博客地址是...
【标题】"fivechess1.rar" 是一个与Visual C++相关的项目,它包含了一个五子棋游戏的实现。在编程领域,五子棋是一种常见的练习项目,用于学习和掌握基本的游戏逻辑和用户界面设计。 【描述】描述中提到,这个C++...
《C++视频教程-VC深入详解自学笔记》是一份全面且免费的学习资源,旨在帮助初学者和有一定基础的开发者深入理解C++编程语言,特别是通过Visual C++ (VC++)这一开发环境进行实践。教程由孙鑫整理,涵盖了从基础到高级...
Visual Studio作为广泛使用的C++开发环境,虽然自身并不具备强大的图形绘制功能,但可以通过与其他软件的集成来实现这一目标。本篇将重点讨论如何利用Visual Studio与gnuplot进行数据可视化,特别是如何显示数组波形...
本学习笔记主要聚焦于Microsoft Foundation Classes (MFC)的深入理解和应用,MFC是微软为Visual C++开发的一个类库,它为Windows应用程序开发提供了强大的支持。MFC将Windows API封装成易于使用的C++类,使得开发者...
### QT学习笔记(四十多个问题解决方案) 在个人学习与使用QT的过程中,遇到了一系列的问题,并针对这些问题找到了相应的解决方案。本文将详细介绍这些解决方案,帮助其他开发者更好地掌握QT开发技巧。 #### 使用`...