你好,可以把那个vc小游戏的office07兼容程序包包也发给我吗?我的邮箱...

vc小游戏的第三篇
编辑:www.fx114.net
本篇文章主要介绍了"vc小游戏的第三篇",主要涉及到vc小游戏的第三篇方面的内容,对于vc小游戏的第三篇感兴趣的同学可以参考一下。
说好今天给大家写一个有点技术含量的博客的,今天就特意加班给大家送上。我认为是个难点也是比较适用的技术,就是怎样把位图的背景颜色去掉,这东西说起来简单,有ps就行了吗?但是我觉得要是自已写程序就可以办成功的话就更好了。恰好这本书上有讲到我就在这里写一下让大家都知道也让我对这个过程更深入一点(如果我有什么不对的地方,希望大牛们给予说明共同进步!!!)。
先说一下这个去掉背景颜色的一般思路:指定一种颜色,然后对这种颜色进行处理,使它的色素不画出来
先介绍介绍这个函数
TransparentBitmap(HDC hdc, HBITMAP hBitmap,short xStart,
short yStart, short xadd,short yadd, COLORREF
cTransparentColor)
hdc显示句柄 hBitmap要显示的位图
xstart ystart显示的位置 &xadd yadd是显示位图的大小变化& cTransparentColor就是背景的那个样色。代码如下:
CMy1_6View::TransparentBitmap(HDC hdc, HBITMAP hBitmap,short xStart,
short yStart, short xadd,short yadd, COLORREF
cTransparentColor)
&& BITMAP&&&&
&& COLORREF&&
& &HDC&&&&
hMem, hBack, hObject, hTemp, hS//&创建临时DC
&& hBack&&
= CreateCompatibleDC(hdc);
&& hObject =
CreateCompatibleDC(hdc);
&& hMem&&&
= CreateCompatibleDC(hdc);
&& hSave&&
= CreateCompatibleDC(hdc);&&
&& hTemp&&
= CreateCompatibleDC(hdc);
&& SelectObject(hTemp, hBitmap);&&&&&//&选入位图
&& GetObject(hBitmap, sizeof(BITMAP),
(LPSTR)&m_bm);
&& POINT&&&&&
ptS&&//显示位图宽高&&
&& ptSize.x = m_bm.bmW& &&//&取得位图的宽度&& &&
&& ptSize.y = m_bm.bmH& &//&取得位图的该度& & & && &
&& DPtoLP(hTemp, &ptSize, 1);&&//&转换为逻辑点值
&& HBITMAP&&&
bmBack, bmObject, bmMem, bmS&&&//&创建临时位图
&& bmBack&&
= CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);&&&//&单色位图&
&& bmObject = CreateBitmap(ptSize.x, ptSize.y,
1, 1, NULL);
&& bmMem&&&
= CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y);&&&//&与设备兼容位图
&& bmSave&&&&&
= CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y);
&& HBITMAP&&&
OldbmBack, OldbmObject, OldbmMem, OldbmS&&&//&将创建的临时位图选入临时DC中
&& OldbmBack&&
= (HBITMAP)SelectObject(hBack, bmBack);
&& OldbmObject = (HBITMAP)SelectObject(hObject,
bmObject);
&& OldbmMem&&&
= (HBITMAP)SelectObject(hMem, bmMem);
&& OldbmSave&&
= (HBITMAP)SelectObject(hSave, bmSave);
&& SetMapMode(hTemp,
GetMapMode(hdc));//&设置映射模式
&& BitBlt(hSave, 0, 0, ptSize.x, ptSize.y,
hTemp, 0, 0, SRCCOPY);//&先保留原始位图
&& cColor = SetBkColor(hTemp,
cTransparentColor);&//&将背景颜色设置为需透明的颜色
&& BitBlt(hObject, 0, 0, ptSize.x, ptSize.y,
hTemp, 0, 0, SRCCOPY);&&//&创建目标屏蔽码
&& SetBkColor(hTemp, cColor);//&恢复源DC的原始背景色&&
&& BitBlt(hBack, 0, 0, ptSize.x, ptSize.y,
hObject, 0, 0, NOTSRCCOPY);//&创建反转的目标屏蔽码
&& BitBlt(hMem, 0, 0, ptSize.x, ptSize.y, hdc,
xStart, yStart, SRCCOPY);&//&拷贝主DC的背景到目标DC&
&& BitBlt(hMem, 0, 0, ptSize.x, ptSize.y,
hObject, 0, 0, SRCAND);&//&屏蔽位图的显示区&&
&& BitBlt(hTemp, 0, 0, ptSize.x, ptSize.y,
hBack, 0, 0, SRCAND);&//&屏蔽位图中的透明色& &
&& BitBlt(hMem, 0, 0, ptSize.x, ptSize.y,
hTemp, 0, 0, SRCPAINT);//&将位图与目标DC的背景左异或操作& &
&& StretchBlt(hdc, xStart, yStart,
ptSize.x+xadd, ptSize.y+yadd, hMem, 0, 0, ptSize.x,
ptSize.y,SRCCOPY);//&拷贝目标到屏幕上
&& BitBlt(hTemp, 0, 0, ptSize.x, ptSize.y,
hSave, 0, 0, SRCCOPY);&//&恢复原始位图
&& DeleteObject(SelectObject(hBack,
OldbmBack));&&&//&删除临时内存位图
&& DeleteObject(SelectObject(hObject,
OldbmObject));
&& DeleteObject(SelectObject(hMem,
OldbmMem));
&& DeleteObject(SelectObject(hSave,
OldbmSave));
&& DeleteDC(hMem);&&&//&删除临时内存DC
&& DeleteDC(hBack);
&& DeleteDC(hObject);
&& DeleteDC(hSave);
&& DeleteDC(hTemp);
这就是这个程序的最核心的地方,其他的代码也就相对的简单了分别如下:
CMy1_6View::CMy1_6View()
& &&&&&&&&&
&&xStart=30;
& & &&yStart=30;
&&&&&& & & & &xadd=0;
&&&&&&&&&&&&& yadd=0;
&& & & & & & &m_Bitmap.LoadBitmap(IDB_BITMAP1);
&& & & & & & &cTransparentColor=RGB(255,255,255);
} //对变量的初始化
然后是定时器的初始化和操作:
int CMy1_6View::OnCreate(LPCREATESTRUCT lpCreateStruct)
(CView::OnCreate(lpCreateStruct) == -1)
&&&&&&&&&&&&& return
&&&&&& // TODO: Add your
specialized creation code here
SetTimer(1,150,NULL);
&&&&&& return 0;
void CMy1_6View::OnTimer(UINT nIDEvent)
&& & &&CDC *pDC=GetDC();&//获取指针pdc
&&&&&&&OnDraw(pDC); //调用OnDraw(pDC)重画
&&&&&& CClientDC
dc(this);& & &
&&&&&& xStart+=5;
&&&&&& yStart+=5;&//向右向下移动
&&&&&& xadd+=2;
& & & &yadd+=2;//位图宽高加2
&& & &&TransparentBitmap(dc.GetSafeHdc(), m_Bitmap, xStart,& yStart, xadd,yadd, cTransparentColor);&&&&&&&//调用显示
CView::OnTimer(nIDEvent);
然后是绘制:
void CMy1_6View::OnDraw(CDC* pDC)
&&&&&& CMy1_6Doc* pDoc =
GetDocument();
&&&&&& ASSERT_VALID(pDoc);
& & &&CBrush mybrush1;//画红色背景
mybrush1.CreateSolidBrush(RGB(255,0,0));
CRect myrect1(0,0,);
pDC-&FillRect(myrect1,&mybrush1);& &&
这个就是整个的过程,我下一篇博客是怎么把位图对应显示,这个问题比较简单我准备在上面的基础上,把这个程序变为一个托盘程序。希望大家给出意见!!!!
版权声明:本文为博主原创文章,未经博主允许不得转载。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接: 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
VC++小游戏开发实例教程
下载积分:30
内容提示:VC++小游戏开发实例教程
文档格式:PDF|
浏览次数:738|
上传日期: 14:53:54|
文档星级:
全文阅读已结束,如果下载本文需要使用
 30 积分
下载此文档
该用户还上传了这些文档
VC++小游戏开发实例教程
关注微信公众号怎样用VC++++6.0编游戏程序???
请具体教教我!谢谢
编游戏又不是卖小菜,真要说清楚很不容易。我对VC++不是很熟,也没办法教你。我建议你去找一个学习C++或者C++编游戏的QQ群,到那里努力学习编程技巧。至于设计,以后学也无妨。
首先,做游戏先要有一个引擎,然后再按照策划案去执行编写。其中引擎是程序员要做的事(用C++写拉)。如果是小游戏那么策划和美工都要自己做了。你觉得如果全说清楚一万多个字够吗?买本书脚踏实地的干吧。
这是因为你把两个带有main函数的程序都放在了同一个project内造成的。如果你的第二个程序真的和第一个程序没有任何关系,你可以这么做:
1在VC的file菜...
你建立一个空的console(控制台)工程,然后会在左侧看到分类:头文件和源程序文件,把你的.h文件和.c文件摆在工程目录下,刷新下vc++里左侧file vi...
现在流行的基本是这几个,用于 win2000 ,winxp
C++ Builder
还有一些一般用不上
borland...
在源代码文件的同一文件夹下有一个Debug或Resele文件夹。其下有个.exe文件。那就是你的程序,把它给你妈妈就行了。如果程序有相应的数据文件支持,和可执行...
word也可以
答: 十二周nt检查,nt值2.0是不是不好
答: Project——settings,在General属性页中有一个Microsoft Foundation Classes的下拉列表框,选择Use MFC in...
答: Project——settings,在General属性页中有一个Microsoft Foundation Classes的下拉列表框,选择Use MFC in...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112}

我要回帖

更多关于 office07兼容程序包 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信