}
else
{
//TODO:
在此添加加载代码
ar>>m_R;
ar>>m_X;
ar>>m_Y;
}
}
#ifdefSHARED_HANDLERS
//缩略图的支持
voidCSDIbookDoc:
:
OnDrawThumbnail(CDC&dc,LPRECTlprcBounds)
{
//修改此代码以绘制文档数据
dc.FillSolidRect(lprcBounds,RGB(255,255,255));
CStringstrText=_T("TODO:
implementthumbnaildrawinghere");
LOGFONTlf;
CFont*pDefaultGUIFont=CFont:
:
FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT));
pDefaultGUIFont->GetLogFont(&lf);
lf.lfHeight=36;
CFontfontDraw;
fontDraw.CreateFontIndirect(&lf);
CFont*pOldFont=dc.SelectObject(&fontDraw);
dc.DrawText(strText,lprcBounds,DT_CENTER|DT_WORDBREAK);
dc.SelectObject(pOldFont);
}
//搜索处理程序的支持
voidCSDIbookDoc:
:
InitializeSearchContent()
{
CStringstrSearchContent;
//从文档数据设置搜索内容。
//内容部分应由“;”分隔
//例如:
strSearchContent=_T("point;rectangle;circle;oleobject;");
SetSearchContent(strSearchContent);
}
voidCSDIbookDoc:
:
SetSearchContent(constCString&value)
{
if(value.IsEmpty())
{
RemoveChunk(PKEY_Search_Contents.fmtid,PKEY_Search_Contents.pid);
}
else
{
CMFCFilterChunkValueImpl*pChunk=NULL;
ATLTRY(pChunk=newCMFCFilterChunkValueImpl);
if(pChunk!
=NULL)
{
pChunk->SetTextValue(PKEY_Search_Contents,value,CHUNK_TEXT);
SetChunkValue(pChunk);
}
}
}
#endif//SHARED_HANDLERS
//CSDIbookDoc诊断
#ifdef_DEBUG
voidCSDIbookDoc:
:
AssertValid()const
{
CDocument:
:
AssertValid();
}
voidCSDIbookDoc:
:
Dump(CDumpContext&dc)const
{
CDocument:
:
Dump(dc);
}
#endif//_DEBUG
//CSDIbookDoc命令
voidCSDIbookDoc:
:
OnChange()
{
//TODO:
在此添加命令处理程序代码
DlgInputdlg;
if(dlg.DoModal()==IDOK)
{
m_R=dlg.R;
m_X=dlg.X;
m_Y=dlg.Y;
UpdateAllViews(NULL);
}
}
//SDIbookView.cpp:
CSDIbookView类的实现
//
#include"stdafx.h"
//SHARED_HANDLERS可以在实现预览、缩略图和搜索筛选器句柄的
//ATL项目中进行定义,并允许与该项目共享文档代码。
#ifndefSHARED_HANDLERS
#include"SDIbook.h"
#endif
#include"SDIbookDoc.h"
#include"SDIbookView.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
//CSDIbookView
IMPLEMENT_DYNCREATE(CSDIbookView,CView)
BEGIN_MESSAGE_MAP(CSDIbookView,CView)
//标准打印命令
ON_COMMAND(ID_FILE_PRINT,&CView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT,&CView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW,&CSDIbookView:
:
OnFilePrintPreview)
ON_WM_CONTEXTMENU()
ON_WM_RBUTTONUP()
END_MESSAGE_MAP()
//CSDIbookView构造/析构
CSDIbookView:
:
CSDIbookView()
{
//TODO:
在此处添加构造代码
}
CSDIbookView:
:
~CSDIbookView()
{
}
BOOLCSDIbookView:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
在此处通过修改
//CREATESTRUCTcs来修改窗口类或样式
returnCView:
:
PreCreateWindow(cs);
}
//CSDIbookView绘制
voidCSDIbookView:
:
OnDraw(CDC*pDC)
{
CSDIbookDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
//TODO:
在此处为本机数据添加绘制代码
CRectrectClient;
GetClientRect(rectClient);
CSizesizeClient=rectClient.Size();
intR=pDoc->m_R;
intX=pDoc->m_X;
intY=pDoc->m_Y;
HBRUSHhBrush;
HPENhPen;
hPen=CreatePen(PS_SOLID,2,RGB(0,255,0));
hBrush=CreateHatchBrush(HS_BDIAGONAL,RGB(255,0,0));//画刷
(CBrush*)pDC->SelectObject(hBrush);
(CPen*)pDC->SelectObject(hPen);
pDC->Ellipse(X-R,Y-R,X+R,Y+R);
}
//CSDIbookView打印
voidCSDIbookView:
:
OnFilePrintPreview()
{
#ifndefSHARED_HANDLERS
AFXPrintPreview(this);
#endif
}
BOOLCSDIbookView:
:
OnPreparePrinting(CPrintInfo*pInfo)
{
//默认准备
returnDoPreparePrinting(pInfo);
}
voidCSDIbookView:
:
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
添加额外的打印前进行的初始化过程
}
voidCSDIbookView:
:
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
添加打印后进行的清理过程
}
voidCSDIbookView:
:
OnRButtonUp(UINT/*nFlags*/,CPointpoint)
{
ClientToScreen(&point);
OnContextMenu(this,point);
}
voidCSDIbookView:
:
OnContextMenu(CWnd*/*pWnd*/,CPointpoint)
{
#ifndefSHARED_HANDLERS
theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT,point.x,point.y,this,TRUE);
#endif
}
//CSDIbookView诊断
#ifdef_DEBUG
voidCSDIbookView:
:
AssertValid()const
{
CView:
:
AssertValid();
}
voidCSDIbookView:
:
Dump(CDumpContext&dc)const
{
CView:
:
Dump(dc);
}
CSDIbookDoc*CSDIbookView:
:
GetDocument()const//非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSDIbookDoc)));
return(CSDIbookDoc*)m_pDocument;
}
#endif//_DEBUG
//CSDIbookView消息处理程序
实验六
综合设计作业任务描述
编写一个电话号码管理系统,要求:
(1)将联系人姓名及电话号码存放到数据库的表格内;
(2)可以实现:
输入联系人姓名,查询得到电话号码的功能;
添加一条联系人姓名及电话号码记录的功能;
删除当前联系人姓名及电话号码记录的功能;
(3)利用MFC的数据库编程、SDI编程、对话框与控件的相关知识完成设计。
1、设计步骤
(1)构造数据库
用MicrosoftAccess创建一个数据库,其中包含一个数据表用来存放联系人的姓名及电话号码。
记录及字段名如下:
(2)创建ODBC数据源
选择MicrosoftAccessDriver(*.mdb)驱动程序,安装数据源如下:
(3)在MFCAppWizard中选择数据源
用MFCAppWizard创建一个单文档应用程序;
向导提示“您要包含数据库吗?
”时,选择“查看数据库使用文件支持”,这时,创建的文档类将全面支持文档操作和数据库操作;
点击“数据源”按钮,选择ODBC数据源tel,再将要使用的表tel选中。
(4)编辑实现各项功能
浏览:
为表单资源模板添加控件如下:
为“姓名:
”、“电话号码:
”静态文本后的编辑框添加变量,这时选择系统自定义的变量m_pSet->m_friendname、m_pSet->m_friendtel,其与数据库的字段关联。
编译运行即可逐条浏览数据库内记录,这是MFCAppWizard创建的功能,并不是我们增加消息,添加消息代码实现的功能。
查询:
为“请输入姓名:
”静态文本后的编辑框添加变量m_strQuery,如下:
为“查询”按钮添加“单击”消息映射,如下:
在“查询”消息映射函数中添加处理函数,如下:
编译运行即可实现输入联系人姓名,查询得到电话号码的功能,显示在“您所查询的记录:
”区域。
增加与删除记录:
所设计功能为:
当按下“添加一条新记录”按钮时,弹出一个对话框,对话框中有编辑框和“确定”按钮;可在编辑框输入联系人姓名及电话号码,按“确定”按钮后,添加一条新记录;
当按下“删除当前记录”按钮时,删除“您所查询的记录:
”区的记录。
添加一个对话框,将表单资源模板“您所查询的记录:
”区的所有控件复制到对话框中,如下:
为对话框创建一个类,为对话框中编辑框添加变量,为对话框中“确定”按钮添加“单击”消息映射:
在“确定”消息映射函数中添加处理函数,如下:
为表单资源模板中“添加一条新记录”按钮、“删除当前记录”按钮添加“单击”消息映射,并添加相应的处理函数,如下:
还需在视文件中包含对话框类的头文件,如下:
编译运行程序,即可完成任务描述中的功能。
2、程序运行结果
初始的数据库录入:
输入联系人姓名,查询得到电话号码:
添加一条联系人记录,并查找该联系人:
删除一个联系人,再查找改