运行",最后运行界面为下图:一个简单的单文档应用程序向导自动建立五个类:向导自动建立的类相应源文件其他源文件相应头文件其他头文件CAboutDlgStdAfx.cppStdAfx.hCXxxAppXxx.cppXxx.rcXxx.hResource.hCXxxViewXxxView" />

MFC单文档应用程序练习ok

MFC单文档应用程序练习ok
MFC单文档应用程序练习ok

MFC单文档应用程序

1.一个简单的单文档应用程序

文件->新建项目->MFC应用程序,出现窗口按“下一步”,出现下面窗口选择单文档

点"调试—>运行",最后运行界面为下图:

一个简单的单文档应用程序向导自动建立五个类:

向导自动建立的类相应源文件其他源文件相应头文件其他头文件CAboutDlg StdAfx.cpp 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)

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)//创建窗体的工具栏,状态栏等 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

BOOL CXxxApp::InitInstance() void CXxxApp::OnAppAbout()

BOOL CXxxDoc::OnNewDocument()//初始化文档字符数据、字体信息等 void CXxxDoc::Serialize(CArchive& ar)

BOOL CXxxView::PreCreateWindow(CREATESTRUCT& cs) void CXxxView::OnDraw(CDC* pDC)

BOOL CXxxView::OnPreparePrinting(CPrintInfo* pInfo)//弹出打印对话框 void CXxxView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) void CXxxView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo) CXxxDoc* CXxxView::GetDocument() // non-debug version is inline

创建单文档应用程序的一般步骤:

● 利用AppWizard 创建应用程序框架

● 在文档内中声明保存文档数据所需要数据对象

● 完成文档类的OnNewDocument 函数,初始化新文档 ● 完成文档类的Serialize 函数,保持和加载文档数据 ● 完成视类的OnInitialUpdate 函数,初始化显示 ● 完成视类的OnDraw 函数,显示当前文档内容

在视类中加入可以使用户编辑文档数据所需的代码

视(View ) 显示用户程序的数据及处理用户与文档的交互 文档对象 永久存储 (磁盘文件) MainFrame 框架窗口

2.简单文本和图形输出

建立一个简单的单文档应用程序SimpleTextPicture,通过修改OnDraw函数在视(View)中输出信息或画图。

找到函数OnDraw(CDC* /*pDC*/),改为OnDraw(CDC* pDC);

OnDraw函数在SimpleTextPicture.cpp文件中,专门用于输出信息或画图。负责视图显示功能(包括打印、显示、预览等)

例2.1 显示正方形和文本

void CSimpleTextPictureView::OnDraw(CDC* pDC)

{

CSimpleTextPictureDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

// TODO: add draw code for native data here

pDC->TextOut(10,120,_T("Hello World!"));

pDC->Rectangle(20,20,100,100);

}

在AppWizard生成的OnDraw函数中加入以黑体字给出的两行代码,运行程序,显示如下:

例2.2显示彩色图形和文本

void CSimpleTextPictureView::OnDraw(CDC* pDC)

{

CSimpleTextPictureDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

// TODO: add draw code for native data here

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);

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));

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);

}

3.滚动字幕

创建一个简单的单文档应用程序Xxx2;

[1] 在Xxx2View.h中添加代码如下:

public:

virtual ~CXxx2View();

#ifdef _DEBUG

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

#endif

protected:

private:

int n;//定义变量

[2]在C Xxx2View构造函数中初始化变量n

CXxx2View::CXxx2View()

{

// TODO: add construction code here

n=0;

}

[3]在Xxx2View.cpp文件中修改OnDraw函数:

void CXxx2View::OnDraw(CDC* pDC)

{

CXxx2Doc* pDoc = GetDocument();

ASSERT_V ALID(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("隶书"));

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]添加三条消息映射,并加入相应代码。

通过菜单命令:视图/类视图,找到CXxx2View类,在CXxx2View类上点击“右键->属性”,找到消息按扭,如下图:

点击

void CXxx2View::OnLButtonDblClk(UINT nFlags, CPoint point) { //鼠标左双击函数

// TODO: Add your message handler code here and/or call default 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

KillTimer(1);

CView::OnRButtonDblClk(nFlags, point);

}

void CXxx2View::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

Invalidate(); //擦除背景,重新绘制

CView::OnTimer(nIDEvent);

}

[5]添加菜单控制与代理

点击视图->资源视图,如下图,双击IDR_MAINFRAME,进入菜单编辑。

在资源Menu中添加运行子菜单:启动(IDC_MOVE)和停止(IDC_STOP)及其消息映射(右键->添加事件处理程序)。

下为“启动”对应的消息映射:

改为OnMove

并修改代码:

void CXxx2View::OnMove() //启动对应消息

{

// TODO: Add your command handler code here

SetTimer(1,300,NULL);

}

void CXxx2View::OnStop() //停止对应的消息

{

// 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;

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)

{

if(a>=b) return a;

else return b;

}

Max::Max(double a, double b, double c, double d)

{

x1=a;x2=b;x3=c;x4=d;

}

double Max::Max4()

{

return Max2(Max2(x1,x2),Max2(x3,x4));

}

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);

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();

m_num[3] = (int) d. Max4();

m_num[4] = (int) e. Max4();

}

5.为CPlotDoc类的成员函数OnNewDocument增加调用语句准备数据。

BOOL CPlotDoc::OnNewDocument()

{

if (!CDocument::OnNewDocument())

return FALSE;

// TODO: add reinitialization code here

// (SDI documents will reuse this document)

Find(); //增加的语句

return TRUE;

}

6.在视类中画图写字

void CPlotView::OnDraw(CDC* pDC)

{

CPlotDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

// TODO: add draw code for native data here

pDC->SetMapMode(MM_ISOTROPIC);

pDC->SetViewportOrg(50,250);

pDC->MoveTo(0,0);

pDC->LineTo(1100,0);

pDC->MoveTo(0,0);

pDC->LineTo(0,600);

int width = 40;

int ch = 'A';

CString str1;

CBrush brush;

brush.CreateSolidBrush(RGB(50, 250,0));

pDC->SelectObject(brush);

for(int i = 1; i<6; i++, ch++)

{

pDC->Rectangle(200*i, 0, 200*i+width, pDoc->m_num[i-1]);

str1.Format(_T("%c"),ch); //整型以字符格式赋给str1

pDC->TextOut(200*i+10,-10, str1); //输出ABCDE

}

CFont font;

font.CreateFont(0,0,0,0,800,0,0,0,OEM_CHARSET,

OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEF AULT_PITCH,_T("楷体"));

pDC->SelectObject(&font);

pDC->TextOut(200,550, _T("各公司销售点水果月销售量直方图"));

}

7.运行程序,结果如下:

5. 单文档串行化编程之一

SerialRect应用程序串行化一个矩形数据,用对话框修改数据,用编辑/修改菜单打开对话框。

2.用AppWizard建立一个普通单文档SerialRect工程,按下一步,直到出现下图,将

CSerialRectView的基类设为CFormView。

改为CFormView

3.初始界面如下:

4.在Form上添加控件

5.添加变量Edit1~Edit4整型(m_x1, m_y1, m_x2, m_y2),取值范围0~300,Edit5为

Control-CEdit型(m_Ctrl)

6.用右键选择控件的Events修改Edit1的黙认EN_CHANGE消息处理OnChangeEdit1为自

定义的OnChangeEdit。其他三个Edit也映射到这个函数。

7.在Doc头文件SerialRectDoc.h中添加变量:

class CSerialRectDoc : public CDocument

{

protected: // create from serialization only

CSerialRectDoc();

DECLARE_DYNCREATE(CSerialRectDoc)

// Attributes

public:

int x1, y1, x2, y2;

// Operations

6. 在SerialRectDoc.cpp的构造函数中初始化变量:

CSerialRectDoc::CSerialRectDoc()

{

// TODO: add one-time construction code here

x1=y1=x2=y2=0;

}

7.SerialRectView.cpp中添加下面内容:

void CSerialRectView::OnChangeEdit()

{

// TODO: Add your control notification handler code here

UpdateData();

CSerialRectDoc* pDoc= GetDocument();

if(m_x1!=pDoc-> x1) pDoc-> x1 =m_x1;

if(m_y1!=pDoc-> y1) pDoc-> y1 =m_y1;

if(m_x2!=pDoc-> x2) pDoc-> x2 =m_x2;

if(m_y2!=pDoc-> y2) pDoc-> y2 =m_y2;

Invalidate(true);

}

void CSerialRectView::OnInitialUpdate()

{

CFormView::OnInitialUpdate();

GetParentFrame()->RecalcLayout();

ResizeParentToFit();

m_x1=GetDocument()->x1;

m_x2=GetDocument()->x2;

m_y1=GetDocument()->y1;

m_y2=GetDocument()->y2;

UpdateData(false);

}

8. 在SerialRectDoc.cpp的串行化代码:

void CSerialRectDoc::Serialize(CArchive& ar)

{

if (ar.IsStoring())

{

// TODO: add storing code here

ar<

}

else

{

// TODO: add loading code here

ar>>x1>>y1>>x2>>y2;

}

}

9.为CSerialRectView类添加OnDraw函数

在工作区类视图中右键单击CSerialRectView类,选择Add Member Function弹出对话框:

void CSerialRectView::OnDraw(CDC *pDC)

{

m_Ctrl.UpdateWindow();

pDC=m_Ctrl.GetWindowDC();

pDC->Rectangle(m_x1,m_y1,m_x2,m_y2);

UpdateData(false);

}

6.单文档串行化编程之二

SerialData应用程序串行化日期结构数据,用对话框修改数据,用编辑/修改菜单打开对话框。

1.用AppWizard建立一个普通单文档SerialDate工程

2.添加一个对话框资源如下:

并为三个编辑框添加变量m_nYear, m_nMonth, m_nDay,

3. 用ClassWizard添加类CDateDialog(其基类为CDialog)

4. 在Doc头文件SerialDateDoc.h中添加下面内容:

struct Date

{

int m_nYear;

int m_nMonth;

int m_nDay;

};

#include "DateDialog.h"

class CSerialDateDoc : public CDocument

{

protected: // create from serialization only

CSerialDateDoc();

DECLARE_DYNCREATE(CSerialDateDoc)

// Attributes

public:

Date date;

4. 编辑菜单中添加子菜单项,ID_EDIT_MODIFY,消息映射到SerialDateDoc.cpp文件中的OnEditModify()函数

5. 在SerialDateDoc.cpp中添加代码

CSerialDateDoc::CSerialDateDoc()

{

date.m_nYear=2002;

date.m_nMonth=6;

date.m_nDay=1;

}

void CSerialDateDoc::Serialize(CArchive& ar)

{

if (ar.IsStoring())

{ar<

}

else

{ar>>date.m_nYear >>date.m_nMonth >>date.m_nDay ;

}

}

void CSerialDateDoc::OnEditModify()

{

CDateDialog dlg;

dlg.m_nYear=date.m_nYear;

dlg.m_nMonth=date.m_nMonth;

dlg.m_nDay=date.m_nDay;

if(dlg.DoModal()==IDOK)

{

date.m_nYear=dlg.m_nYear;

date.m_nMonth=dlg.m_nMonth;

date.m_nDay=dlg.m_nDay;

}

UpdateAllViews(NULL);

SetModifiedFlag(true);//关闭窗口时提示存盘

}

6. 修改SerialDateView.cpp中的OnDraw代码

void CSerialDateView::OnDraw(CDC* pDC)

{

CSerialDateDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

CString str;

str.Format(_T("Year:%d"), pDoc->date.m_nYear);

pDC->TextOut(20,20,str);

str.Format(_T("Month:%d"), pDoc->date.m_nMonth);

pDC->TextOut(20,40,str);

str.Format(_T("Day:%d"), pDoc->date.m_nDay);

pDC->TextOut(20,60,str);

}

mfc绘图程序上机步骤

首先生成MFC程序空框架 空框架中的每个类的职责是什么要自己理解清楚 第一次课: 1.定义自己的数据类CLine直线类,用于绘图 点击菜单:插入—类 选择Generic class,输入类名,每个类都是分成两个文件.h 中只有类体,包含类的数据成员定义和成员函数声明,.cpp中就是成员函数的类体外实现 classCLine { int x1,y1,x2,y2; public: CLine(int a=0,int b=0,int c=0,int d=0); virtual ~CLine(); int Getx1(); int Gety1(); int Getx2(); int Gety2(); void SetPoint1(intx,int y);很多函数是在后面使用中发现问题逐渐添加的 void SetPoint2(intx,int y); }; 2.自定义的类要作为数据成员出现在Doc类中 classCSmallCADDoc : public CDocument { protected: // create from serialization only CSmallCADDoc(); DECLARE_DYNCREATE(CSmallCADDoc) // Attributes public: CLine line1; //数据成员应该是私有,但是由于文档类与视图类交换频繁,为了访问方便,直接定义成公有了。你也可以定义成私有,再定义一个Get函数间接访问,取他的值3.注意:添加了这个数据成员后,需要增加几个#include “Line.h”语句 添加的原则是,每个cpp文件都单独编译,哪里用到新的类,相应的cpp前就要增加#include “。。。”语句 此处是在CSmallCADDoc类中添加了一个CLine line1;类对象,在SmallCADDoc.h文件中。所以,凡是包含了#include “SmallCADDoc.h”的地方都要在前面添加#include “Line.h” 语句。共3处:app doc view 这3个类的cpp文件前 4.注意:初始化 CLine line1; //数据成员是文档类的,它不像dos下程序,明确能看到定义,调用构造

mfc简单绘图程序

M F C 简 单 的 绘 图 程 序 ——王帅

目录 摘要 (2) 关键字 (2) 1 引言 (2) 设计目的 ............................................................................................................ 错误!未定义书签。 2 功能说明 (2) 2.1菜单栏....................................................................................................... 错误!未定义书签。 2.1.1图形 (3) 2.1.2画笔 (4) 2.1.3画硬币 (4) 2.2工具栏 (5) 2.3状态栏 (5) 3 功能的实现 (5) 3.1 视图设计 (5) 3.2 编辑资源 (6) 3.3 编程思路及各个函数的实现 (7) (1)思路 (7) (2)代码的实现 (7)

1.为基本形状创建一个基类 (8) 2.基本形状类的创建 (8) 2.1矩形类的创建及定义 (8) 2.2圆形类的创建及定义 (10) 2.3正五边形类的创建及定义 (11) 2.4正三角形类的创建及定义 (14) 2.5椭圆类的创建及定义 (16) 2.6正四边形类的创建及的定义 (17) 2.7正六边形类的创建及定义 (18) 2.8直线类的创建及定义 (19) 3.各基本形状类在CMyDraw2_0类中的调用和绘图的实现 (20) 3.1矩形类的调用与与绘图的实现 (20) 3.2圆形类的调用 (24) 3.3正三角形类的调用 (25) 3.4基本类型调用的剩余代码 (26) 4.画笔的使用、颜色及大小的调整 (29) 5.画硬币 (35) 6.工具栏中的自定义控件 (38) 7.状态栏中的显示 (39) 4程序功能的测试 (41) 5最后总结 (42)

MFC对话框向主窗体传递消息机制

对话框向主窗体传递消息,在视图中显示 现举例说明对话框向主窗体传递消息,以及主窗体响应消息的过程。我们拿单文档来说明,我们要实现下列功能:通过对话框,在文本框中输入字符串,在视图中显示刚才输入的字符串。 1、在应用程序向导中选择单个文档,然后完成。我这里的项目名称为mybook 2、在资源视图中,插入一对话框,对话框名称为dlg_wzm。 3、在刚才生成的对话框中插入一文本框,设置好相应的类和变量。为确认按钮生成响应函数。同时在mybook.cpp的BOOL CMyBookApp::InitInstance()函数中让该对话框启动,也就是加入CDlg_wzm dlg; dlg.DoModal();两行程序,当然在前面的要加入#include "dlg_wzm.h"。(详细过程略) 4、下面重点在于点击该对话框的确认按钮向主窗体发送消息。要现定义一个消息名称。

在stdafx.h文件中加入一行: #define WM_MYMESSAGE WM_USER+100 5、在CMainFrame的pulic申明中加入一变量CString wzmstr。目的是为了保存对话框中的字符串的值。在对话框的Onok()函数中: void CDlg_wzm::OnOK() { // TODO: Add extra validation here this->UpdateData(true); CMainFrame* pWnd=(CMainFrame*)AfxGetMainWnd(); //得到父窗体的指针 pWnd->wzmstr=this->m_input_edit; ASSERT(pWnd!=NULL); ::SendMessage(pWnd->GetSafeHwnd(), WM_MYMESSAGE,0,0); //发送消息 //注意WM_MYMESSAGE就是我们前面定义的消息。 //CDialog::OnOK(); } 6、下面我们看看主窗体怎么接受消息。我们要在主窗体中设置消息映射。 在mainfrm.h的protected声明中: afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); 在mainfrm.cpp文件中, BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code ! ON_WM_CREATE() ON_MESSAGE(WM_MYMESSAGE,OnMyMessage) //这里是我们加入的。 //}}AFX_MSG_MAP END_MESSAGE_MAP() 然后在mainfrm.cpp的文件最下面加入一个函数: void CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam) { CView *pView=this->GetActiveView(); //得到视图指针 if(pView)

简单的绘图程序实验报告

面向对象程序设计实训(基于MFC程序设计) 题目: 简单的绘图程序 院系专业: 姓名: 学号: 同组其他学生(学号):

简单绘图程序说明 1、功能分析 目前这个软件的主要功能有如下: 1、画直线:通过OnLine()函数实现。 2、画矩形:通过OnRectangle()函数实现。 3、画圆角矩形:通过OnRoundrect()函数实现。 4、画椭圆:通过OnEllipse()函数实现。 5、铅笔工具:可以画任意线条。通过直接在OnMouseMove(UINT nFlags, CPoint point)函数里面添加代码实现。 6、右键弹出菜单:可以在客户中点击鼠标右键,快速选择常用菜单。通过 OnContextMenu函数实现。 7、状态栏显示鼠标移动的坐标:在程序的右下角显示,通过调用setWidnowText 和GetParent()实现。 8、画图颜色选择:可以画任何颜色的线条,通过OnColor()函数实现。 9、线条类型及线宽的设置:可以将画出的线条设置成实线、虚线、点线、点划 线,双点划线,还可以设置线条的粗细,,通过实例这一功能立刻显示所选择线条的粗细及线型。通过新建CLineSettingDlg类,其中OnSelchangeLineStyle()函数实现线型的改变,OnChangeEditLineWidth()函数实现线宽的改变。再在CDrawView类中调用OnLineSetting()函数实现画笔的对话框, CLineSettingDlg类中的OnPaint()函数是实现示例功能的。 10、窗口的重绘时不擦除原来的内容:新建CShape类用来保存线条的颜色,线 宽,填充色等属性,在窗口大小发生变化时有OnDraw(CDC* pDC)函数进行重绘工作,重绘中调用了各个绘图函数的Draw(CDC *pDC)函数。 11、所绘图形的保存于读取,通过Serialize(CArchive &ar)函数进行序列化操作, 将所绘图形的信息通过文件的形式保存起来。

用VC++MFC做文本编辑器(单文档模式)

用VC++MFC做文本编辑器(单文档模式)(2007-7-6 17:06:00) 原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下: 1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。 2,在系统自动生成的CTextview_1Doc类里面增加一个控件,用于文本文档的暂时存放: class CTextview_1Doc : public CDocument { ...... public: CStringArray m_strContent; } 然后在CTextview_1Doc类的Serialize函数里面增加打开、保存文本文件的程序: void CTextview_1Doc::Serialize(CArchive& ar) { CString str; if (ar.IsStoring()) { // TODO: add storing code here int nLines = (int)m_strContent.GetSize(); for ( int i=0; i

通知书之关于培训的通知

关于培训的通知 【篇一:关于内部员工培训的通知】 关于内部员工培训的通知 公司各部门: 为进一步提升公司各员工的职业技能及业务素质,公司将在近期开 展公司内部人员的培训,希望各部门、各位员工积极配合。在此将 相关事宜通知如下: 一、培训时间:本周三开始每天上午和晚上(预计持续一周) 二、培训地点:会议室; 三、培训对象:公司全体员工 四、要求与说明: 1、请各部门、各员工提前安排好工作,按时参加培训; 2、参加 培训所有人员须自带笔和纸,做好相应的会议笔记; 3、请各部门 负责人相互传达,无特殊情况不准请假; 特此通知,谢谢大家的支持与配合! 综合管理部 2014年6月23日 【篇二:关于员工培训通知】 关于员工培训通知 2013年将是我们公司的发展壮大年,公司将继续推进人才优先发展 战略,创建学习型企业;为提高员工专业技能,掌握公司各工岗位 工作流程的操作标准,强化培养现有员工,体现企业文化,计划在2013年至及以后,常期开展一系列的文化、技能专业培训与外出深 造考察,通过以自学为主、自主培训、送出去学习深造等多种形式 进行培养,现将有关项目和内容通知如下: 一、思想文化方面:爱已、爱人、爱岗、企业文化建设及文化知 识提高(入职培训);二、岗位操作的培训,对本职工作的应知应会,工作规范、工作标 准、工作流程,具体到一进企业门,该干什么?怎么干好?怎么防范?发现与解决问题?做好本职工作的标准熟练掌握(营销与设计、工程专业技能技巧:能力培训;沟通与协调能力的培训;听、写、讲、做的基本培训);职业规划培训;三、心态心理(人生价值观、生活观、就业观、道德观、企业认同、

归属与幸福感)讲座课;四、企业高管的培训:进行领导艺术, 领导能力的学习。 经批准认可参加培训的个人不需支付任何费用,且必须签订培训协议; 授课形式:公司统一集中培训,各部门自行组织培训,公司外部深 造学习,案例考察参观…… 报名流程:各部门将统一到行政部领取培训申请表,完整填写提交 行政部汇总考核;经审核后,行政部按照组织要求进行培训实施, 记录 ,跟踪,归档;具体培训日期以行政部发文为准,请各部门给予支 持配合。本月培训申请已开始接受报名! 争做一流员工,共造一流品牌,同创一流企业! 行政部 2012-12-12 培训申请表 填表日期:年月日 申请部门经理:制表: 浙江卓凡展览有限公司 【篇三:培训通知范文】 培训通知 公司各机构: 为了进一步提高公司员工的执行力和贯彻力,培育积极向上的企业 文 化,提高员工业务水平和业务素质,增强企业竞争能力。公司决定 开展一次企业文化入门培训。 培训讲师: 培训题目:进门者请放弃一切自治 培训时间:12月19日(今晚7:00) 参加人员:公司内班长以上职务人员务必参加,欢迎其他员工参加。培训地点:食堂三楼礼堂 请接到通知后,行政部后勤科布置好会场;各参会人员做好时间调整。 公司办公室 二〇一三年十二月十九日 为贯彻落实集团总公司2013年职工教育培训计划,我司本着自我 培训与企业培训相结合,岗位培训与专业培训相结合的方针,通过

C++实验报告(MFC简单画图程序)

VC++程序设计实验报告 一、实验目的 掌握MFC编程 二、实验内容 用MFC向导创建单文档应用程序,一个简单的画图程序。 ?使用C++语言实现 ?使用VC++6.0集成开发环境开发 ?使用MFC应用程序开发框架 三、实验步骤 ?基本功能描述 1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、 曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2. 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决 定图形的大小,当鼠标弹起,此图形则绘制完毕。 ?设计思路 1. 对需要用到的变量进行初始化。 2. 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 3. 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4. 选择图形或其它属性,可进行下一次绘制。 ?软件设计 A 设计步骤 1.创建单文档 创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。创建成功后,系统自动生成相应的类,如图3所示。

图1 创建工程 图2 创建单文档

mfc简单绘图程序报告

简单绘图程序 1 需求说明 1.1 问题描述 设计一个简单的绘图应用程序,可以绘制图形或自由绘制线段,可以更改颜色、画笔粗细、保存文件。 1.2功能说明 1.图形绘制功能:直线、椭圆、矩形。 在菜单栏中选择需要的图形(也可以通过工具栏中选择)用鼠标便能在视图中绘出相应的图形。 2.可以绘制自由线段 3.对图形的操作:能通过菜单栏弹出对话框选择线宽、自定义颜色,也可以擦除绘制的线段。 4.可以保存绘图文件,保存后打开可以继续绘制。 2.1.3 数据说明 在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。在CDzyView类中添加一个私有变量xz;用来保存用户的选择(直线、矩形、椭圆、自由绘图)在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标停止移动时得到另外一个点。为视图类CDzyView分别捕获鼠标左键按下和弹起这两个消息。当鼠标左键按下时,需要将鼠标当前按下点保存至sx、sy,在鼠标移动停止后,将当前坐标保存至ex,ey.

其他主要数据说明: int fd 判断是否为自由绘图模式int w 线宽 int R RGB中的R int G RGB中的G int B RGB中的B CGraph类中 int m_nType:保存后重绘时用户的选择int qdx; 重绘起点x int qdy; 重绘起点y int zdx; 重绘终点x int zdy; 重绘终点y CLine类中 int cx; 重绘线宽 int sx; 重绘起点x int sy; 重绘起点y int zx; 重绘终点x int zy; 重绘终点y int w; 重绘线宽 自定义颜色对话框关联变量: IDC_EDIT_RED int m_Red IDC_EDIT_GREEN int m_Green IDC_EDIT_BLUE int m_Blue IDC_SCROLL_RED CScrollBar m_Sred IDC_SLIDER_GREEN CSliderCtrl m_Sgreen IDC_SPIN_BLUE CSpinButtonCtrl m_Sblue 2 分析、设计与实现 2.1 主要功能设计与实现

教育培训机构关于寒假放假通知书

教育培训机构关于寒假放假通知书 关于2016年寒假放假通知书 各部门(中心、实体): 2016年寒假期间工作安排经总经理办公会研究确定,现通知如下: 一、寒假放假时间 (一)公司机关放假时间定为2月16日至3月6日,3月7日起正常上班。 (二)各中心(实体)根据自身业务情况及学校放假时间安排,自行拟定本部门放假时间。 (三)培训工作另行通知。 二、假期工作安排 (一)2月13日召开二级机构会议布置假期工作。 (二)假期各部门如有维修工作,请将各部门假期维修计划于1月13日前报办公室。 (三)各部门做好假前的安全自检工作,1月14日公司将组织对各部门假前安保防范情况进行检查。 (四)各部门于3月3日前做好新学期的各项准备工作。 (五)各部门2016年工作总结及2016年工作要点(含台账)各两份加盖公章于3月10日报公司办公室。另外,将2016年工作总结及2016年工作要点(含解码)的电子版上传到OA系统中的“信息管理员”

中。 (六)3月8日各部门以表格形式将本部门员工假期加、值班情况上报公司办公室,公司将以此为依据统计工作 量。 三、假期工作要求 (一)要认真做好本部门员工的遵纪守法和人身安全的教育。 (二)各部门要认真做好安全保卫工作,二级机构负责人要定期到本部门所辖区域进行安全检查,发现隐患及时处理。公司领导班子及办公室将在假期进行不定期巡查。 (三)不参与赌博,不搞不正之风。 (四)各部门假前要进行一次卫生清扫工作,清理好各类资产,整理好工作备品,并封好库房、门窗工作。 (五)各部门要做好假期的设备、设施的保养与检修工作,要确保各种设备运转正常,对突发性设备停运情况要做好充分的应急处理准备。 (六)公司要求寒假期间全体员工必须保持联系畅通,保证随叫随到。员工出行向部门负责人请假,二、三级机构负责人出行向分管副总请假并报办公室备案,领导班子成员出行需告知办公室。 四、假期安全管理 (一)各部门要重点做好假期防火、防盗工作,预防各类事故的发生。防火、防盗预案应在值班室上墙,值班人员做到应知应会。 (二)各部门对重点要害部位要加强值班值宿,不得空岗脱岗,值

MFC实现简单画图形程序(学习相关)

《MFC编程及应用》课程设计报告题目:简单画图形程序 学号:姓名: 指导老师: 时间: 评语:

程序设计步骤: 一、建立基于对话框的应用程序框架; 二、CMy0910200155Dlg类中关键新增变量的作用: CPtrArray pta; //用于保存已绘图形的相关信息。 CMemoryNode *pmN; //指向CMemoryNode类的指针,程序运行过 程中动态保存对象信息。 CMemoryNode *pmn; //指向CMemoryNode类的指针,从文件中读 取信息时动态创建类的对象。 COLORREF m_CurrentBrushColor; //用于存放当前画刷的颜色。 COLORREF m_CurrentPenColor; //用于存放当前画笔的颜色。 int num; //用于存放从"Index.txt"文件中读取的数字。 int flag=0; //用于标识:当为1时,表示按下了”画图”按钮;当为2时, 表示按下了”撤消”按钮;当为3时,表示按下了”加载历史” 按钮,则从文件中读取信息。 int mark; //用于标识:当为0时,表示刚画过矩形;当为1时,表示 刚画过圆角矩形;当为2时,表示刚画过椭圆。 int index; //用于存放pta数组的容量。 int flag1=0; //用于标识,和flag搭配,用来处理多种情况下的窗口重绘 问题。 int ButtonState=0; //用于标识,是类CShow和类CMy0910200155Dlg 的一个接口,通过其值在1和0之间转换,来处理弹出式对 话框的初次绘制和移动时的重绘问题。

c面向对象程序设计MFC简单计算器实验报告

计算机与信息工程学院 《程序设计基础》课程设计报告 题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东 学生学号:2011508154 专业班级:电子信息工程(1)班 指导教师:高攀

1 课程设计的题目 编写一个能实现简单功能的计算器 2 题目要求 1. 有一个计算器图形。 2. 能实现加、减、乘、除及乘方的运算。 3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色 例如:输入数字1 时,在计算器图形上的1键变为红色。 4. 屏幕、图形颜色、形状自定 3 总体设计 3.1 总体框架 图1 系统框架

3.2 系统功能说明 在VC++6.0中绘制计算器界面,各控件的设置 对0~9控件设定相应的ID和其他属性: 图2 “1”控件设置 对“+、-、*、\”控件设定相应的ID和其他属性: 图2 “+”控件设置 对其它控件设定相应的ID和其他属性: 图3 其它控件设置

主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。 4 程序详细设计 4.1系统主调模块 图5 程序流程图

4.2各模块详细设计 4.2.1 建立的变量,控件的命名,对应的消息处理函数对应表 double poz; //保存小数点的位置,初始化为1,表示poz-1个小数点。 double m_Dis; //Edit控件上需要显示的数字 BOOL point_flag; //小数点表示位,判定是否是小数,是小数为1,不是小数为0。 double numfirst; //保存计算过程中的前一个数字, double numsecond;//保存计算过程中的第二个数字 char op;//记录当前的计算符号,可以为’+’,’-’,’*’,’/’,’=’,’c’,’n’ 变量初始化: poz=1; m_Dis = 0.0; numfirst=0; numsecond=0; op=0;

培训通知

关于开展“雏鹰”学员(中学)教学基本功大赛的通知 区属各中学校: 为进一步开展好“雏鹰”学员培训工作,促进青年教师专业成长,为青年教师成长搭建交流展示的平台。根据伊春区“雏鹰”教师培训工作安排,现决定开展“雏鹰”学员(中学)教学基本功大赛。希望各校以此次活动为契机,提高青年教师参加教学基本功训练的积极性、自觉性。具体活动安排如下: 一、时间:2015年7月中旬上午8:00—11:00 二、地点:区教育培训中心学校四楼大会议室。 三、参赛人员:中学雏鹰班全体学员(后附名单)。 四、比赛内容:粉笔字书写和简笔画作画。 五、比赛说明: (一)粉笔字书写 1.比赛内容 现场公布指定的统一书写内容(例如,古诗词一首等)。 2.比赛形式 在统一规定的时间内,参赛教师按给定的内容,按照抽签顺序,每四人为一组,集中当场书写。现场评分并公布选手得分。 3.粉笔字书写要求: (1)粉笔字适合上课板书用字(正楷或行楷)。 (2)书写时间:5分钟。

(4)各选手在参赛黑板指定位置(右下角)标明自己的姓名。 (5)有良好的书写习惯,笔顺正确,笔画清楚,字形规范,布局合理;书写美观、大方、流畅、有力、间架结构合理。 (二)简笔画作画 1.比赛内容 简笔画共分两部分:教学简笔画的自选造型 (如:动物类、植物类、水果、家电、交通工具等) 此项占简笔画分数30%;教学简笔画在教学中的应用(主题画):由选手根据学科特点自选主题,画中需用简短文字说明主题,主题内容以上报的本学期所任学科内容为准。此项占简笔画分数的70%。 2.比赛形式 在统一规定的时间内,按照抽签顺序,每四人为一组,现场作画,评委现场评分,并公布选手得分。 3.作画时间:10分钟 4.简笔画作画要求: (1)图示准确、形象简练、线条流畅。 (2)能较好地掌握简笔画的技能技巧,在规定时间内能生动、活泼地表现事物,画质鲜活逼真,布局合理,美观。 (3)各选手在参赛黑板指定位置(右下角)标明自己的姓名、任教学科及学年。 (三)评委构成:有关领导、相关学科教研员及骨干教师。 (四)奖项设置:简笔画和粉笔字各取一等奖一名,二等奖二名。

VS2010和MFC编程入门之2(利用MFC向导生成单文档应用程序框架)

VS2010/MFC编程入门之二(利用MFC向导生成单文档 应用程序框架) 这里给大家一个简单的例子,演示如何生成单文档应用程序框架。 解决方案与工程 在VS2010的使用介绍中已经讲了解决方案与工程的概念,这里再重提一下。每个应用程序都作为一个工程来处理,它包含了头文件、源文件和资源文件等,这些文件通过工程集中管理。在VS2010中,工程都是在解决方案管理之下的。一个解决方案可以管理多个工程,可以把解决方案理解为多个有关系或者没有关系的工程的集合。VS2010提供了一个Solution Explorer解决方案浏览器视图,可以显示当前解决方案的内容,当新建一个工程时可以选择新建一个解决方案还是加入当前解决方案。 下图左侧面板中正在显示的视图就是Solution Explorer,视图中有一个解决方案-HelloWorld,此解决方案下有一个同名的工程-HelloWorld。 在应用程序向导生成应用程序后,VS2010会在用户设置的路径下,以解决方案名为名称建立一个目录,里面存放自动生成的文件。 使用VS2010应用程序向导生成单文档应用程序框架

这里简略演示下怎样生成单文档应用程序框架,让大家先有个直观的了解,有不理解的地方可以留着以后回来再看。下面按照操作步骤一步步讲解: 1.点菜单栏File->New->Project,弹出New Project对话框,我们可以选择工程类型。 如果安装完VS2010以后第一启动时已经设置为VC++,则Installed Templates->Visual C++项会默认展开,而如果没有设置VC++,则可以展开到Installed Templates->Other Languages->Visual C++项。因为我们要生成的是MFC程序,所以在“Visual C++”下选择“MFC”,对话框中间区域会出现三个选项:MFC ActiveX Control、MFC Application和MFC DLL。MFC ActiveX Control用来生成MFC ActiveX控件程序。MFC Application用来生成MFC应用程序。MFC DLL用来生成MFC动态链接库程序。当然我们要选择MFC Application。 在对话框下部有Name、Location和Solution name三个设置项。意义如下:Name--工程名,Location--解决方案路径,Solution name--解决方案名称。这里Name 我们设为“HelloWorld”,Location设置为“桌面”的路径,Solution name默认和Name一样,当然可以修改为其他名字,这里我们不作修改,也使用“HelloWorld”。点“OK”按钮。

通知书之管理人员培训通知

管理人员培训通知 【篇一:管理人员提升能力素质培训通知】 分公司关于举办管理人员提升能力素质培训班的通知 各管理所: 为进一步提升管理人员的科学化管理水平,完善知识结构,增强站 股级干部履职能力、决策能力、执行能力和创新意识,分公司定于2012年8月6日至10日举办管理人员提升能力素质培训班,现将 培训具体事宜通知如下: 一、培训内容: 1. 管理基本知识; 2. 人力资源管理; 3. 职业礼仪; 4. 团队沟通、协作与执行; 5. 职业规划与职业精神; 6. 写作基础 知识。二、培训人员: 1. 各管理所所长、主管收费副所长; 2. 各管理所办公室主任或办公 室负责人; 3. 各管理所收费股、养护股股长,路政中队长; 4. 各收 费站站长、副站长。三、培训时间及地点: 1. 时间:8月6日上午报到,8月6日下午至8月10日培训。 2. 地点:分公司大会议室。 四、培训相关事宜: 1. 培训人员食宿由会务组统一安排; 2. 报到当日学员需提交免冠1寸彩照一张,经培训考试合格者,发 放结业证书; 3. 培训报名截止8月3日上午10:00;各管理所须认真填写报名回执 表并及时报人力资源科; 4. 所有参训人员严格遵守培训工作纪律,培训期间不得无故请假或 旷课。 附件:管理人员提升能力素质培训报名回执表 二〇一二年八月一日 附件: 管理人员提升能力素质培训报名回执表 备注:请用正楷字体仔细填写以上信息。 【篇二:管理人员培训通知】 省安全生产培训教育中心关于危险化学品生产经营单位主要负责人 及安全生产管理人员培训实行网络 报名的通知

来源:培训中心作者: 发表时间:2015-9-24 15:44:27 点击:273次 字体: 晋安培教字〔2015〕15号 各相关单位: 为了进一步规范培训秩序、控制一定班容量,提高培训质量,落实《山西省安全生产监督管理局关于2015年安全生产培训考试计划的 通知》(晋安监发 【2015】31号)文件精神。经中心研究决定,从即日起全省危险化学品生产经营单位主要负责人及安全生产管理人员培训班实行以网 络方式报名。具体报名细则如下: 一、参培学员报名时学员请将报名汇总表(见附件1)电子版发送 至山西省安全生产培训教育中心邮箱(sxajpx002@https://www.360docs.net/doc/8c11423212.html,),收 到回复“您已成功报名至第x期xx培训班,请于x年x月x日前往 x地现场报到”。其他未成功报名学员顺延下期,网上报名结束。 二、报到学员现场报到时,请携带以下资料,资料不全者不予接受 报到。 (一)初训报到所提供资料:学员登记表(见附件2)、市(县) 安监局介绍信、中央驻晋企业和省属企业介绍信、身份证复印件、 单位营业执照复印件(企业名称预核准通知书)、专科以上学历证、单位安全生产许可证复印件(如单位未办理安全生产许可证可不提供)。 (二)换证报名所提供资料:学员登记表(见附件2)、市(县) 安监局介绍信、中央驻晋企业和省属企业介绍信、身份证复印件、 单位营业执照复印件(企业名称预核准通知书)、专科以上学历证、单位安全生产许可证复印件(如单位未办理安全生产许可证可暂不 提供)、资格证书原件。 三、为确保培训质量,及学员自身安全,保障学时,提升合格率, 参培学员统一安排食宿、费用自理。 附件:《报名汇总表》 《学员登记表》 2015年9月10日 山西省安全生产培训教育中心关于危险化学品生产经营单位主要负 责人及安全生产管理人员培训实行网络报名的通知 标签:关于危险化学品生产经营单位主要负责人安全生产管理人员 培训网络报名通知

简易画图板设计报告

设计报告:Graphic简易画 图板 -----韩伟谢程焜肖越周峰 电科二班

1设计目的 设计一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。此程序将实现简单的绘图功能,包括点、直线、矩形、椭圆、扇形和连续线的绘制。并且能实现绘图的控制,包括线宽、线型和颜色的设置,图形的保存和打开以及笔刷的使用。 2 总体设计 设计图如图6

图6 3详细设计 首先,新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。添加的六个菜单项的ID及名称如表1所示。然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示。

在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。因此在CGraphicView类中添加一个私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述: private: UINT m_nDrawType; 接着,在视类的构造函数中将此变量初始化为0,程序代码如下: CGraphicView::CGraphicView() { // TODO: add construction code here m_nDrawType=0; } 利用switch/case语句,来分别完成相应图形的绘制。当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。程序代码如下:void CGraphicView::OnDot() { // TODO: Add your command handler code here m_nDrawType=1; } void CGraphicView::OnLine() { // TODO: Add your command handler code here m_nDrawType=2; } void CGraphicView::OnRectangle() { // TODO: Add your command handler code here m_nDrawType=3; } void CGraphicView::OnEllipse() { // TODO: Add your command handler code here m_nDrawType=4;

培训通知范文

作文网小编为大家精心准备了《培训通知范文》,希望对大家有所帮助,如果想了解更多的写作技巧请继续关注我们的作文栏目。 篇一:培训通知范文 公司各机构: 为了进一步提高公司员工的执行力和贯彻力,培育积极向上的企业文化,提高员工业务水平和业务素质,增强企业竞争能力。公司决定开展一次企业文化入门培训。 培训讲师:XXX 培训题目:XX 进门者请放弃一切自治 培训时间:XX月XX日(今晚X:00) 参加人员:XXX 公司内班长以上职务人员务必参加,欢迎其他员工参加。 培训地点:XXX楼礼堂 请接到通知后,行政部后勤科布置好会场;各参会人员做好时间调整。 公司办公室 201X年XX月XX日 篇二:培训通知范文 各位教师: 我校定于本周五下午3:00进行教师教育技术能力培训,希望各位教师能提前做准备。 驻操营小学 20xx年11月22日 教育技术能力培训通知 各位教师:

我校定于本周五下午3:00进行教师教育技术能力培训,希望各位教师能提前做准备。 驻操营小学 20xx年11月22日 篇三:培训通知范文 机关科室、各事业部: 根据XXXX有限公司关于加大企业内部培训力度的会议精神,切实有效的开展企业内部培训,人力资源部定于本月开展《经济合同法》的相关培训,相关内容如下。 培训内容:《经济合同法》通例培训、合同谈判风险规避培训时间:20xx年5月25日9:00-11:30 签到时间:20xx年5月25日8:40 培训地点:行政楼二楼会议室 名额分配:机关科室7人,XXX事业部6人,XXX事业部 6人,XXX事业部6人。 人力资源部 20xx年5月21日 篇四:培训通知范文 XXX各部门: 为了普及安全知识,提高安全意识,强化安全责任,防止各类火灾等事故的发生,全面做好公司安全工作。在不影响正常工作的情况下,组织进行一次安全专项培训活动,现就培训活动的有关情况通知如下: 一、培训时间:20XX年XX月XX日至20XX年XX月XX日(各部门自行安排培训时间) 二、培训形式:理论学习和实际操作两部分。 三、培训对象:XX全体人员 四、培训内容:

基于MFC的OpenGL绘图

基于MFC的OpenGL绘图 本文更新版本请点击 [置顶]《基于MFC的OpenGL编程》系列文章 一、简介 GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC")。每一个GDI命令需要传给它一个DC,但与GDI不同,OpenGL使用当前绘制环境(RC)。一旦在一个线程中指定了一个当前RC,在此线程中其后所有的OpenGL命令都使用相同的当前RC。虽然在单一窗口中可以使用多个RC,但在单一线程中只有一个当前RC。下面我将首先产生一个OpenGL RC并使之成为当前RC,这将分为三个步骤:设置窗口像素格式;产生RC;设置为当前RC。 二、MFC中的OpenGL基本框架 1、首先创建工程 用AppWizard产生一个MFC EXE项目,其他默认即可。 2、将此工程所需的OpenGL文件和库加入到工程中 在工程菜单中,选择"Build"下的"Settings"项。单击"Link"标签,选择"General"目录,在Object/Library Modules的编辑框中输入"opengl32.lib glu32.lib glut.lib glaux.lib"(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选择"OK"结束。然后打开文件"stdafx.h",加入下列头文件: #include #include 3、改写OnPreCreate函数并给视图类添加成员函数和成员变量

OpenGL需要窗口加上WS_CLIPCHILDREN(创建父窗口使用的Windows风格,用于重绘时裁剪子窗口所覆盖的区域)和WS_CLIPSIBLINGS(创建子窗口使用的Windows风格,用于重绘时剪裁其他子窗口所覆盖的区域)风格。把OnPreCreate改写成如下所示:BOOL COpenGLDemoView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS); return CView::PreCreateWindow(cs); } 产生一个RC的第一步是定义窗口的像素格式。像素格式决定窗口着所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将有对这些参数的设置。我们先在COpenGLDemoView的类中添加一个保护型的成员函数BOOL SetWindowPixelFormat(HDC hDC)(用鼠标右键添加)和保护型的成员变量:int m_GLPixelIndex;并编辑其中的代码如下: BOOL COpenGLDemoView::SetWindowPixelFormat(HDC hDC) {//定义窗口的像素格式 PIXELFORMATDESCRIPTOR pixelDesc= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL| PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0, 0,

VS2010MFC编程入门之十一(对话框:模态对话框及其弹出过程)

加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益。趁热打铁,鸡啄米这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。 一.模态对话框和非模态对话框 Windows对话框分为两类:模态对话框和非模态对话框。 模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。 非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。 大家对Windows系统很了解,相信这两种对话框应该都遇到过。之前的加法计算器对话框其实就是模态对话框。 二.模态对话框是怎样弹出的 毕竟加法计算器程序大部分都是MFC自动生成的,对话框怎么弹出来的大家可能还不是很清楚。鸡啄米下面简单说说它是在哪里弹出来的,再重新建一个新的对话框并弹出它,这样大家实践以后就能更灵活的使用模态对话框了。 大家打开Addition.cpp文件,可以看到CAdditionApp类有个InitInstance()函数,在M FC应用程序框架分析中提到过此函数,不过那是单文档应用程序App类中的,函数体不太相同,但都是进行App类实例的初始化工作。

InitInstance()函数的后半部分有一段代码就是定义对话框对象并弹出对话框的,鸡啄米下面给出这段代码并加以注释: 弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。CDialog::DoModa l()函数的原型为:

virtual INT_PTR DoModal(); 返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nR esult参数值。如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABOR T。 调用了它对话框就会弹出,返回值是退出对话框时所点的按钮的ID,比如,我们点了“退出”按钮,那么DoModal返回值为IDCANCEL。 三.添加一个新对话框并弹出它 鸡啄米再为加法计算器程序添加一个对话框,以在计算之前询问用户是否确定要进行计算。大家可以完整的看下对话框的添加和弹出过程。 1.根据“创建对话框模板和修改对话框属性”中所讲的方法,在Resource View中的“Di alog”上点右键选择“Insert Dialog”,创建一个新的对话框模板,修改其ID为IDD_TIP_DIA LOG,Caption改为“提示”,然后参考“为对话框添加控件”中所讲,在对话框模板上添加一个静态文本框(static text),Caption改为“您确定要进行加法计算吗?”,接下来修改OK 按钮的Caption为“确定”,Cancel按钮的Caption为“取消”,最后调整各个控件的位置和对话框的大小。最终的对话框模板如下图: 2.根据“创建对话框类和添加控件变量”中创建对话框类的方法,在对话框模板上点右键选择“Add Class...”,弹出添加类的对话框,设置“Class name”为CTipDlg,点“OK”。在S olution Explorer中可以看到生成了CTipDlg类的头文件TipDlg.h和源文件TipDlg.cpp。 3.我们要在点“计算”按钮之后弹出此提示对话框,那么就要在“计算”按钮的消息处理函数OnBnClickedAddButton()中访问提示对话框类,所以为了访问CTipDlg类,在Addition Dlg.cpp中包含CTipDlg的头文件:#include "TipDlg.h"。 4.修改OnBnClickedAddButton()的函数体,在所有代码前,构造CTipDlg类的对象tip Dlg,并通过语句tipDlg.DoModal();弹出对话框,最后判断DoModal()函数的返回值是IDO K还是IDCANCEL来确定是否继续进行计算。OnBnClickedAddButton()函数修改后如下: C++代码

相关文档
最新文档