|
快来打地鼠
实例实现的是在5个洞口随机出现可爱的地鼠,当用鼠标点击到地鼠后,地鼠会伸长舌头,表明你已经打到它了,效果如图1所示。
关键技术
实例中一共有5个地鼠洞,每个地鼠洞都是一个矩形区域,在定时器内随机获取5个区域中的一个,然后在该区域内绘制地鼠图像,如果用户在该区域内按下了鼠标,表明已经打到地鼠,需要在该区域内重新绘制老鼠图片,绘制伸长舌头地鼠图像。实例是在OnPaint方法内通过一个图像编号来绘制地鼠图像,图像编号是多少就绘制该编号的图像,其他编号的图像不被显示,也就实现了隐藏。
设计过程
(1)创建基于对话框的工程,将对话框的ID设置为IDD_MOUSE_DIALOG。
(2)向工程中添加光标资源,将光标资源的ID设置为IDC_BROWSE。
(3)在OnInitDialog函数中设置区域坐标,并设置定时器。
(4)在函数OnPaint中绘制地鼠图片,如果随机区域号变量m_iCurRand值为-1,就不绘制任何地鼠图片。
void CMouseDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
//代码省略
}
else
{
CDialog::OnPaint();
}
if (m_iCurRand > -1)
{
CDC* pDC = GetDC(); //获取设备上下文指针
CBitmap bmp;
bmp.LoadBitmap(IDB_MOUSE); //加载图片
CDC memDC;
memDC.CreateCompatibleDC(pDC); //创建兼容设备上下文
memDC.SelectObject(&bmp); //加载图片到设备上下文
pDC->BitBlt(m_rcCur.left,m_rcCur.top,m_rcCur.Width(),
m_rcCur.Height(),&memDC,0,0,SRCCOPY); //绘制图片
bmp.DeleteObject();
memDC.DeleteDC();
}
}
(5)在定时器实现函数OnTimer内实现随机区域。
(6)函数OnLButtonDown是单击按钮的实现函数,如果用户单击到地鼠,就重新绘制地鼠的图片,绘制伸长舌头的地鼠图片。
秘笈心法
心法领悟601:CopyRect方法的使用
CRect类的CopyRect方法可以实现矩形区域的复制,如果不使用该方法复制矩形区域就需要提取CRect对象的left、top、right、bottom四个成员的值,然后分别赋值给另一个CRect对象的四个成员。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|