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;