MFC 坦克定位
最近学习MFC,写了个用键盘上下左右移动的坦克界面,效果图:
先用VC++新建一个最简单的MFC项目,基于Dialog的
1. 添加坦克图片资源:略
2. 添加3个变量:x, y, m_bitmap
int x;
int y;
CBitmap m_bitmap;
3. 在初始化方法中加载bitmap以及设置好初始的坐标位置:
BOOL Ctest3Dlg::OnInitDialog()
{
//略(系统生成的代码略)
this->m_bitmap.LoadBitmapW(IDB_BITMAP2); //BMP文件的资源文件ID
BITMAP bmpInfo;
this->m_bitmap.GetBitmap(&bmpInfo); //获取图片的宽高等属性 RECT r;
this->GetWindowRect(&r); //获取当前Dialog的宽高等属性
this->x=(r.right-r.left)/-bmpInfo.bmWidth/; //计算出中心位置
this->y=(r.bottom-r.top)/-bmpInfo.bmHeight/; //计算出中心位置 return TRUE;
}
4. 重写OnPaint函数:
CClientDC d(this);
CDC memDC;
memDC.CreateCompatibleDC(&d);
memDC.SelectObject(&m_bitmap);
BITMAP bmpInfo;
this->m_bitmap.GetBitmap(&bmpInfo);
d.BitBlt(this->x, this->y, bmpInfo.bmWidth, bmpInfo.bmHeight, &memDC, , , SRCCOPY); //这句最重要
5. 挂载键盘event:
void Ctest3Dlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 switch (nChar)
{
case VK_LEFT:
this->x-=;
break;
case VK_RIGHT:
this->x+=;
break;
case VK_UP:
this->y-=;
break;
case VK_DOWN:
this->y+=;
break;
default:
break;
} this->InvalidateRect(NULL); //擦除原先的图片,重新画出图片(OnPaint中) CDialogEx::OnKeyDown(nChar, nRepCnt, nFlags);
}
6. 由于Dialog中的事件机制,需要加入消息预处理函数才能让程序真正接收到keydown事件,如下:
BOOL Ctest3Dlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message == WM_KEYDOWN)
{
SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
} return CDialogEx::PreTranslateMessage(pMsg);
}
上面写的比较简单,事件关联没有写进去,不过由于有UI向导帮助建立,所以就没有写,如:
BEGIN_MESSAGE_MAP(Ctest3Dlg, CDialogEx)
ON_WM_PAINT()
ON_WM_KEYDOWN()
END_MESSAGE_MAP()
哈哈,现在能控制坦克的上下左右了。
MFC 坦克定位的更多相关文章
- MFC关于VS内存释放的定位
全部在App中完成 1.在 App.h 头文件声明 #ifdef _DEBUGprotected: CMemoryState m_msOld, m_msNew, m_msDiff;#endi ...
- MFC逆向-消息响应函数的定位
MFC == Microsoft Foundation Class,微软基础类库,他封装了Windows API以便用户更快速的开发界面功能程序然而该库及其庞大而复杂,需要有C++的功底否则很难 ...
- VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库
1.问题描述 原开发环境:Win7 64位旗舰版,VS2010,ThinkPad T460 出现问题:自己开发的MFC程序在WinXP环境下无法正常运行,弹框“无法定位程序输入点InitializeC ...
- [置顶] (奇迹冬瓜)坦克大战[MFC框架]
经过二次整合 重新放出MFC框架下的坦克大战 采用小窗口 多线程 双缓冲 动画帧化 碰撞检测 接口封装 混音 事件延迟等 力求做到代码与美工的双向化 开场动画 界面一 界面二 游戏界面 结束动画 零积 ...
- dll文件:关于MFC程序不能定位输入点
问题:无法定位程序输入点到动态链接库上...... 过程:找完整个工程文件夹: APS为资源文件: resource.h为定义文件: 完全复制 除主文件以外的所有文件,程序可用: 在主程序框Cpp文件 ...
- java selenium (五) 元素定位大全
页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法. 测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 阅读目录 自动化测试步骤 ...
- 自制MFC消息响应定位器+原理分析
mfc里面有张消息映射表(MESSAGE_MAP),消息都是通过这张表来分发到相应函数里的. 这个是我自制的定位器,从vc6.0到现在的2013生成的mfc都可以用,全静态扫描并已处理动态基址. 下面 ...
- MFC 调试方法
AfxDebugBreak MFC 提供特殊的 AfxDebugBreak 函数,以供在源代码中对断点进行硬编码: AfxDebugBreak( ); 在 Intel 平台上,AfxD ...
- MFC List Control 控件添加单元格编辑,实现可编辑重写
在实现随机生成四则运算的个人项目中,目前已经完成基本功能,想要把程序变成一个Windows界面的程序.原本以为学习过MFC,应该很快就能完成.但是由于以前用的都是VC6.0,这次用了VS2010,稍微 ...
随机推荐
- (python)数据结构---元组
一.描述 一个有序的元素组成的集合 元组是不可变的线性数据结构 二.元组的相关操作 1.元组元素的访问 索引不可超界,否则抛异常IndexError 支持正负索引 t = (2, 3) print(t ...
- 最简单的java浏览器
/** * Created by Admin on 2017/3/27. */ import java.awt.BorderLayout; import java.awt.Container; imp ...
- 第八章 Hyper-V 2012 R2 故障转移群集
和终端用户相比,企业用户对于业务的连续性和可靠性更为在意.相对而言,企业一般不会将追逐单一硬件的性能排在第一位. 如何衡量业务是否持续可用,一般使用"x 个 9"这种方式来定义.如 ...
- spring拦截器(interceptor)简介
1. 拦截器用途 (1)拦截未登录用户直接访问某些链接 (2)拦截日志信息 (3)拦截非法攻击,比如sql注入 2. 涉及jar.类 (1)spring-webmvc.jar (2)HandlerIn ...
- 安装Window 10系统------计算机经验
为什么这次安装window10系统呢?不是和window7系统的安装方法一样么?如果你是这样的想的话,是不完全对的,因为window10系统的安装有些繁杂,需要耐心.下面我就准备了官方原版的windo ...
- Microsoft .NET Framework 3.5 离线安装方法 (仅适用于Win8以上的系统)
所需工具:本系统对应原版镜像或Win8以上操作系统原版ISO镜像 操作: 1.利用Windows资源管理器挂载 ISO 镜像,或其他虚拟光驱工具挂载镜像,记住挂载的盘符 2.打开Windows命令提示 ...
- February 16th, 2018 Week 7th Friday
Full of luck, health and cheer. We wish you a Happy Chinese New Year! 春节快乐,万事如意! From Shanbay. Today ...
- python的shelve模块
shelve shelve是一额简单的数据存储方案,他只有一个函数就是open(),这个函数接收一个参数就是文件名,并且文件名必须是.bat类型的.然后返回一个shelf对象,你可以用他来存储东西,就 ...
- ORC Creation Best Practices
Short Description: ORC Creation Best Practices with examples and references. Article Synopsis. ORC i ...
- 寒假训练——搜索 K - Cycle
A tournament is a directed graph without self-loops in which every pair of vertexes is connected by ...