MFC基于对话框,在对话框上插入图像控件,在图像控件上,画一个绿色的矩形,按键盘上下左右键,矩形在图像控件上移动移动。分别创建一个文本文件和一个二进制文件,对话框退出时,文档内写入保存退出前的矩形的位



MFC基于对话框,在对话框上插入图像控件,在图像控件上,画一个绿色的矩形,按键盘上下左右键,矩形在图像控件上移动移动。分别创建一个文本文件和一个二进制文件,对话框退出时,文档内写入保存退出前的矩形的位置的数据。退出对话框后,再次打开对话框通过读取文本文件或二进制文件的数据,矩形应该显示在上次退出之前的位置。


1.新建一个MFC基于对话框的工程,在对话框上插入图像控件。然后在图像控件上绘制一个绿色的矩形。绘制矩形代码如下:

(1)dlg类添加成员变量 CRect类型的变量 m_rect此变量用来保存矩形的四个坐标点。在dlg类的构造函数中给矩形赋初值。


CfileoperatorDlg::CfileoperatorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CfileoperatorDlg::IDD, pParent)
, m_string(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_rect.left=10;
m_rect.top=10;
m_rect.right=80;
m_rect.bottom=60;
}
(2)OnPaint()函数中来话矩形,代码如下
void CfileoperatorDlg::OnPaint()
{......
else 
{
  CDialog::OnPaint();
}
CDC * hDC  =GetDlgItem(IDC_SHOW)->GetDC();   //得到图像控件相关的DC指针
hDC ->FillSolidRect(& m_rect,RGB(0,255,0));  //用DC类中的FillSoliRect函数画矩形。
return ture; 
2.捕获键盘上的上下左右键并移动矩形(注意:矩形只能在图形控件上移动)
(1)重写dlg类的PreTranslateMessage函数,来接收键盘上下左右键消息,并对消息做相应的处理。
在dlg类中添加crect 类型的成员变量 m_rectctr,用来保存图像控件矩形的坐标点。代码如下:
BOOL CfileoperatorDlg::PreTranslateMessage(MSG* pMsg)
{
   (GetDlgItem(IDC_SHOW))->GetClientRect(&m_rectctr);   //得到对话框图像控件的窗口,然后通过GetClientRect将图像控件的坐标点                         
                                                   设置为原点
    if(pMsg->message == WM_KEYDOWN)       //接收的消息等于键盘按下的消息
   {  
        switch(pMsg->wParam) 
{
          case VK_UP:
           m_rect.top= m_rect.top-10;      //按下上键,矩形向上移动10个位置,即上下坐标都要减10,左右下键如同
   m_rect.bottom= m_rect.bottom-10;
 if( m_rect.top<0)                   //矩形只能在图像控件上移动,如果当其顶点坐标小于0,就要将其设置为0,左右下如同
{
 m_rect.top=0;
 m_rect.bottom=50;
}
break;
        case VK_DOWN:
m_rect.top= m_rect.top+10;
       m_rect.bottom= m_rect.bottom+10;
       if( m_rect.bottom>m_rectctr.bottom)
{
  m_rect.top=m_rectctr.bottom-50;
  m_rect.bottom=m_rectctr.bottom;
       }
       break;
case VK_LEFT:
m_rect.left=m_rect.left-10;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值