1.新建MFC文件
- 创建新项目,选择“MFC应用”
- 应用程序类型选“基于对话框”,点“完成”
2.显示界面
- 资源文件
- .rc文件
- Dialog文件下的_dialog文件
3.编辑框
点右键属性可以看到名字,IDC_EDIT1
给编辑框加变量:在头文件,Dlg.h,类定义中加
private:
CString str;
变量关联编辑框,在源文件,Dlg.cpp文件中,在对话框定义的DoDataExchange中
DDX_Text(pDX,IDC_EDIT1,str);
在其他函数中用编辑框中的数据,使用ss进行计算
double ss=_tstof(str);
将数据显示在编辑框中
str.Format(_T("%f"),ss);
4.按钮
双击按钮
UpdateData()代表更新编辑框中的内容,并赋给变量,TRUE代表取到这个值
UpdateData(TRUE);
给str的内容后面再加abc
str = str+_T(“abc”);
str = “ ”;//为空
更新关掉
UpdateData(FALSE);
5.删除
- .h文件中删除private和public文字框和按钮内容
- .cpp文件中按钮1按钮2的代码删掉
- BEGIN_MESSAGE_MAP中的ON_BN_CLICKED()删除
- DoDataExchange()中的DDX_Text()删掉
6.输出TXT文件
以下代码写在.cpp文件的按键函数下
// 创建一个CStdioFile对象
CString FileName = _T("D://AAAA.txt");//文件路径
CStdioFile fileWrite;
if (!fileWrite.Open(FileName, CFile::modeWrite | CFile::modeCreate))
{
AfxMessageBox(_T("无法打开文件"));
return;
}
//实现功能
fileWrite.WriteString(VMmin);//VMmin变量是CString类型
fileWrite.Write(&Space, sizeof(Space));//Space是char类型
fileWrite.WriteString(VMmax);
// 关闭文件
fileWrite.Close();
7.CString数据类型与int、double等数据类型转换
CString数据类型转为int、double等
CString str;
int a;
a=_ttol(str);//int类型
CString strValue = _T("123.45");
double doubleValue = _tstof(strValue);
// 或者使用 _tcstod 函数,它更安全,因为它允许指定转换结束的位置
double doubleValue = _tcstod(strValue, nullptr);
int、double等转化为CString数据类型
CString str;
int a;
str.Format(_T(“%d”),a);
//str.Format(_T(“%f”),a);
8.图像添加
- 向界面添加Picture control控件
- 在资源视图,右键添加资源,选择Bitmap导入图片
- 将picture control控件的类型改为Bitmap,图像选择之前导入的图片ID
9.菜单添加
资源视图,.rc文件右键添加资源,选择Menu,新建
对菜单进行编辑
在Dialog这里,右键属性,在菜单选中刚才编辑的Memu
10.更改控件的大小
在.cpp文件中,OnInitDialog()函数下
CWnd* pWnd;
pWnd=GetDlgItem(控件ID);
pWnd->SetWindowPos(NULL,0,0,800,800,SWP_NOZORDER|SWP_NOMOVE);//800指像素大小
11.类
在解决方案资源管理器中点文件名右键,添加,类
12.设置图片位置和大小
- 选择控件,右键添加变量,设置变量名称,如ourplane
- 在.cpp文件下的OnInitDialog()函数下
OurPlane.SetWindowPos(nullptr,100,150,30,30,SWP_NOZORDER);//控件位于(100,150)像素,大小30×30像素
13.图片移动(定时器)
在Dlg.h文件的public中定义图片位置坐标
int Our_x = 100;
int Our_y = 200;
双击开始按键,跳到.cpp文件中
void CMFCAttackZone1Dlg::OnBnClickedButtonSta()
{
//启动ID为1的定时器,定时时间为1秒
SetTimer(1, 1000, NULL);//1000代表1000毫秒,1代表ID
}
双击暂停按键,跳到.cpp文件中
void CMFCAttackZone1Dlg::OnBnClickedButtonStop()
{
KillTimer(1);//1代表计时器ID
}
设置图片控件变量,右键点击图片控件,选择添加变量,为其命名OurPlane
对话框右键添加类向导,选择消息,在列表内找到WM_TIMER双击添加,在.cpp文件中的OnTimer()函数下
if (nIDEvent == 1)
{
Our_x = Our_x + 10;//我方移动速度
if (Our_x > 400)//移动范围
{
Our_x = 100;
}
OurPlane.SetWindowPos(nullptr, Our_x, 200, 30, 30, SWP_NOZORDER);//重新绘制图片
}
14.图形绘制
在.cpp文件的OnPaint()函数的else里,注意把CDialogEx::OnPaint();删除
//定义dc
CPaintDC dc(this);
//创建一个画笔和画刷
CPen pen(PS_SOLID,2,RGB(0,255,0));//创建一个绿色画笔,宽度为2,用于画线
CBrush brush(RGB(255,0,0));//创建一个红色画刷,用于填充
// 选择画笔和画刷到设备上下文中
dc.SelectObject(&pen);
dc.SelectObject(&brush);
// 假设圆心坐标是 CPoint center(xCenter, yCenter)
CPoint center(Our_x, Our_y); // 这里的 Our_x 和 Our_y 是圆心的横纵坐标
int radius = 20; // 圆的半径
// 计算边界框的坐标
int left = center.x - radius; // 圆左边界x坐标
int top = center.y - radius; // 圆上边界y坐标
int right = center.x + radius; // 圆右边界x坐标
int bottom = center.y + radius; // 圆下边界y坐标
// 绘制圆
dc.Ellipse(left, top, right, bottom);
如果需要绘制第二个圆,在后面继续写
dc.SelectObject(&pen);
dc.SelectObject(&brush);
dc.Ellipse(left, top, right, bottom);
在做动画需要不断刷新窗口时,需要在.cpp文件中的OnTimer()函数下
InvalidateRect(nullptr); // 通知窗口重绘