
.
简单的MFC应用程序设计
一、实验目的
1.理解Windows编程特点;
2.了解MFC应用程序的消息映射、数据映射机制;
3.掌握用AppWizard(exe)创建SDI和MDI应用程序的方法;
4.掌握使用项目工作区窗口的ClassView页面为类添加成员的方法;
5.掌握用ClassWizard映射消息的方法。
6.掌握对话框编辑器的使用方法;
7.熟悉对话框的编程过程及控件的创建和使用方法;
8.掌握静态控件、按钮和编辑框控件的使用方法。
二、内容与设计思想
上机实践内容:
1.设计一个对话框,用于学生成绩的输入,要求能输入学生姓名、学号、性别以及3门课程成绩,单击“求平均”按钮是计算3门课程的平均成绩并显示在上面的静态文本框中。通过单击“测试”菜单下的“成绩录入”子菜单调用该对话框,在该对话框中要用到控件:静态文本、编辑框(单行和多行)、单选框、复选框、组框、按钮等,其运行结果如下:
三、使用环境
操作系统:Windowns XP
C++环境:Visual C++ 6.0
四、核心代码及调试过程
#include "ScoreInput.h"
#include "MainFrm.h"
#include "ScoreInputDoc.h"
#include "ScoreInputView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BEGIN_MESSAGE_MAP(CScoreInputApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
CScoreInputApp::CScoreInputApp()
{
}
CScoreInputApp theApp;
BOOL CScoreInputApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
Enable3dControlsStatic();
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings();
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CScoreInputDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CScoreInputView));
AddDocTemplate(pDocTemplate);
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
enum { IDD = IDD_ABOUTBOX };
CButton m_Avg;
float m_avg;
int m_english;
int m_yuwen;
int m_math;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
afx_msg void OnButton1();
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
m_avg = 0.0f;
m_english = 0;
m_yuwen = 0;
m_math = 0;
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BUTTON1, m_Avg);
DDX_Text(pDX, IDC_EDIT1, m_avg);
DDX_Text(pDX, IDC_EDIT4, m_english);
DDX_Text(pDX, IDC_EDIT5, m_yuwen);
DDX_Text(pDX, IDC_EDIT6, m_math);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
END_MESSAGE_MAP()
void CScoreInputApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
void CAboutDlg::OnButton1()
{
m_avg = 0.0f;
m_english = 0;
m_yuwen = 0;
m_math = 0;
Update(true);
m_avg=(m_english+m_yuwen+m_math)/3.0;
Update(false);
}
五、总结
通过本次上机实践,我学会了类的定义及运用,以及在定义的类中各种函数的用法,兵使其得到实际运用。实验结果还是相对满意,但实验结果中有总是遇到非常非常多的错误,这是本实验的困惑,希望接下来能有更多了解。
回答以下问题:
1.如何添加消息映射函数?
答:在.h文件中加入
afx_msg void OnUmsock(WPARAM wParam, LPARAM lParam);
在.cpp文件中进入
BEGIN_MESSAGE_MAP(..)
...
ON_MESSAGE(UM_SOCK, OnUmsock)
...
END_MESSAGE_MAP()
....
void CYourClass::OnUmsock(WPARAM wParam, LPARAM lParam)
{
}
六、附录
