VC闪存吧
1.新建MFC AppWizard[exe] MyCalculator
2.选择基于对话框,直接完成向导。
3.打开资源视图,展开Dialog
双击IDD_MYCALCULATOR_DIALOG
删除默认的文本与按钮。
4.选中按钮,打开属性面版,Caption相当于Text
ID不变。
5.引入一个变量,将输入的数据和计算的结果在编辑框显示。
拖一个编辑框上去。ID为IDC_DISPLAY
右击添加变量,把"控件变量"勾上。
选择编辑框IDC_DISPLAY
类别选择Value;变量类型选择CString
变量名为m_display
6.添加一个变量,变量类型为double
变量名m_first;访问protected
这样在头文件中添加了变量。
可以直接在MyCalculatorDlg.h中直接手写。
8.打开MyCalculatorDlg.cpp
找到构造函数
CMyCalculatorDlg::CMyCalculatorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyCalculatorDlg::IDD, pParent)
, m_display(_T(""))
, m_first(0)
{
m_first=0.0;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
添加m_first=0.0;在构造函数里初始化。
9.为按钮添加事件处理程序。
右击按钮->添加事件处理->选择BN_CLICKED添加编辑。
10.
UpdateData(true);//控件值传给变量
UpdateData(false);//变量值传给控件
11.添加自定义函数,要在头文件中声明。
//自定义函数
void CMyCalculatorDlg::UpdateDisplay(double Val)
{
m_display.Format(_T("%f"),Val);
int i = m_display.GetLength();
while(m_display.GetAt(i-1)=='0')
{
m_display.Delete(i-1,1);
i--;
}
UpdateData(false);
}
MyCalculatorDlg.h中声明
public:
afx_msg void OnBnClickedButtonok();
afx_msg void OnBnClickedButton0();
afx_msg void UpdateDisplay(double Val);
};
12.关于消息处理函数。
实际上执行了三个操作。
12.1在My.h中添加函数原型.
12.2在My.cpp中添加函数体。
12.3在My.cpp中添加消息映射。
通过向导删除事件处理函数时,并不删除函数体,需要手工删除。
13.数据交换DDX和校验DDV
13.1当为Edit控件创建变量m_display的时候。
void CMyCalculatorDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_DISPLAY, m_display);
}
14. error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类
AfxMessageBox(_T("Hi"));
AfxMessageBox(("click"));
错误 error C2665: 'AfxMessageBox' : none of the 2 overloads could convert all the argument types
用的是vc2005
解答:
VS2005编译器的检查更严格了,在vc6和vc7种可以编译通过的语句:AfxMessageBox(“test”);
VS2005编译器只能写成AfxMessageBox(_T("test"));才能使用,否则编译器会告诉你有两个AfxMessageBox函数
,但编译器不知道使用哪一个。错误提示如上。
在书写代码的时候要养成使用TEXT("")或_T("")的习惯,这样文本在UNICODE和非UNICODE程序里都通用!
我这个博客废弃不用了,今天想寻找外链的时候,突然想到这个博客权重很高。
有需要免费外链的,留言即可,我准备把这个博客变成免费的友情链接站点。