MFC单文档应用程序练习ok

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OnDraw函数在SimpleTextPicture.cpp文件中,专门用于输出信息或画图。负责视图显示功能(包括打印、显示、预览等)
例2.1显示正方形和文本
void CSimpleTextPictureView::OnDraw(CDC* pDC)
{
CSimpleTextPictureDoc* pDoc = GetDocument();
KillTimer(1);
CView::OnRButtonDblClk(nFlags, point);
}
void CXxx2View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
DeleteObject(pen);
DeleteObject(brush);
CString str(_T("Hello World!"));//用UNICODE编码pDC->SetTextColor(RGB(0,0,250));
pDC->TextOut(120,150,str);
pDC->SetTextColor(RGB(125,125,125));
void CXxx2View::OnDraw(CDC* pDC)
{
CXxx2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(!pDoc)
return;
pDC->SetTextColor(RGB(0,0,235));
pDC->SetBkMode(TRANSPARENT);
CFont font;
font.CreateFont(28,15,0,0,FW_NORMAL,false,false,false,DEFAULT_CHARSET,OUT_DEVICE_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,_T("隶书"));
完成视类的OnInitialUpdate函数,初始化显示
完成视类的OnDraw函数,显示当前文档内容
在视类中加入可以使用户编辑文档数据所需的代码
2.简单文本和图形输出
建立一个简单的单文档应用程序SimpleTextPicture,通过修改OnDraw函数在视(View)中输出信息或画图。
找到函数OnDraw(CDC*/*pDC*/),改为OnDraw(CDC* pDC);
SetTimer(1,500,NULL);
CView::OnLButtonDblClk(nFlags, point);
}
void CXxx2View::OnRButtonDblClk(UINT nFlags, CPoint point)
{ //鼠标右双击函数
// TODO: Add your message handler code here and/or call default
}
4.为CPlotDoc类增加一个公有的void类型的成员函数Find和一个公有int数据成员数组m_num[5],使用类产生对象并计算它们的最大值,将它们转换成int,存入整数数组m_num。
void CPlotDoc::Find()
{
Max a(110.5, 120.8, 110, 68);
Max b(130, 256.5, 90, 200);
double a[]={31.4,888.54};
char ch[10];
CString str1;
str1.Format(_T("%f"),a[0]);
pDC->TextOut(20,40,str1);
str1.Format(_T("%f"),a[1]);
pDC->TextOut(20,60,str1);
{
// TODO: Add your command handler code here
KillTimer(1);
}
4.使用计算数据画直方图
1.使用AppWixard生成单文档工程Plot
2.在PlotDoc.h中类CPlotDoc的定义之前加入类Max的定义:
class Max
{
double x1,x2,x3,x4;
CPen pen;
CBrush brush;
pen.CreatePen(PS_SOLID, 3, RGB(250,0,0));
brush.CreateSolidBrush(RGB(0,250,0));
pDC->SelectObject(pen);
pDC->SelectObject(brush);
pDC->Ellipse(100,200,300,300);
BOOL CXxxView::OnPreparePrinting(CPrintInfo* pInfo)//弹出打印对话框
voidCXxxView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
void CXxxView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
BOOL CXxxDoc::OnNewDocument()//初始化文档字符数据、字体信息等
void CXxxDoc::Serialize(CArchive& ar)
BOOLCXxxView::PreCreateWindow(CREATESTRUCT& cs)
voidCXxxView::OnDraw(CDC* pDC)
double Max2(double,double);
public:
Max(double,double,double,double);
double Max4();
};
3.在PlotDoc.cpp的文件尾部加入类Max的实现部分:
// CPlotDoc commands
double Max::Max2(double a, double b)
StdAfx.h
CXxxApp
Xxx.cpp
Xxx.rc
Xxx.h
Resource.h
CXxxView
XxxView.cpp
XxxView.h
CXxxDoc
XxxDoc.cpp
XxxDoc.h
CMainFrame
MainFrame.cpp
MainFrame.h
文档—视结构
每个类的主要函数:
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
CXxxDoc* CXxxView::GetDocument() // non-debug version is inline
创建单文档应用程序的一般步骤:
利用AppWizard创建应用程序框架
在文档内中声明保存文档数据所需要数据对象
完成文档类的OnNewDocument函数,初始化新文档
完成文档类的Serialize函数,保持和加载文档数据
Invalidate(); //擦除背景,重新绘制
CView::OnTimer(nIDEvent);
}
[5]添加菜单控制与代理
点击视图->资源视图,如下图,双击IDR_MAINFRAME,进入菜单编辑。
在资源Menu中添加运行子菜单:启动(IDC_MOVE)和停止(IDC_STOP)及其消息映射(右键->添加事件处理程序)。
Max c(125, 406.8, 350, 330);
Max d(120, 356.8, 300, 280.5);
Max e(102, 256.8, 120, 105);
m_num[0] = (int) a. Max4();
m_num[1] = (int) b. Max4();
m_num[2] = (int) c. Max4();
通过菜单命令:视图/类视图,找到CXxx2View类,在CXxx2View类上点击“右键->属性”,找到消息按扭,如下图:
点击
void CXxx2View::OnLButtonDblClk(UINT nFlags, CPoint point)
{ //鼠标左双击函数
// TODO: Add your message handler code here and/or call default
MFC单文档应用程序
1.一个简单的单文档应用程序
文件->新建项目->MFC应用程序,出现窗口按“下一步”,出现下面窗口选择单文档
点"调试—>运行",最后运行界面为下图:
一个简单的单文档应用程序向导自动建立五个类:
向导自动建立的类
相应源文件
其他源文件
相应头文件
其他头文件
CAboutDlg
StdAfx.cpp
下为“启动”对应的消息映射:
并修改代码:
void CXxx2View::OnMove() //启动对应消息
{
// TODO: Add your command handler code here
SetTimer(1,300,NULL);
}
void CXxx2View::OnStop() //停止对应的消息
pDC->SelectObject(&font);
pDC->TextOut(n,100,_T("世上无难事,只要肯登攀!"));
n=n+20;
RECT r;
GetClientRect(&r); //获得窗口
if(n>r.right-r.left)//窗口如果n>右坐标减去左坐标
n=0;
}
[4]添加三条消息映射,并加入相应代码。
}
3.滚动字幕
创建一个简单的单文档应用程序Xxx2;
[1]在Xxx2View.h中添加代码如下:
public:
virtual ~CXxx2View();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)//创建窗体的工具栏,状态栏等
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
BOOL CXxxApp::InitInstance()
void CXxxApp::OnAppAbout()
{
if(a>=b) return a;
else return b;
}
Max::Max(double a, double b, double c, double d)
{
x1=a;x2=b;xቤተ መጻሕፍቲ ባይዱ=c;x4=d;
}
double Max::Max4()
{
return Max2(Max2(x1,x2),Max2(x3,x4));
#endif
protected:
private:
int n;//定义变量
[2]在CXxx2View构造函数中初始化变量n
CXxx2View::CXxx2View()
{
// TODO: add construction code here
n=0;
}
[3]在Xxx2View.cpp文件中修改OnDraw函数:
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
Find();//增加的语句
return TRUE;
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->TextOut(10,120,_T("Hello World!"));
pDC->Rectangle(20,20,100,100);
}
在AppWizard生成的OnDraw函数中加入以黑体字给出的两行代码,运行程序,显示如下:
m_num[3] = (int) d. Max4();
m_num[4] = (int) e. Max4();
}
5.为CPlotDoc类的成员函数OnNewDocument增加调用语句准备数据。
BOOL CPlotDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
例2.2显示彩色图形和文本
void CSimpleTextPictureView::OnDraw(CDC* pDC)
{
CSimpleTextPictureDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
相关文档
最新文档