怎样用MFC做一个图形界面程序

怎样用MFC做一个图形界面程序,第1张

给你个最最简单的MFC程序。你可以打开2005 新建win32 程序 建立空项目 然后编写如下代码//hellocpp

#include <afxwinh>

// 说明应用程序类

class CHelloApp : public CWinApp

{

  public:

 virtual BOOL InitInstance();

};

// 建立应用程序类的实例

CHelloApp HelloApp;

// 说明主窗口

class CHelloWindow : public CFrameWnd

{

CStatic cs;

public:

CHelloWindow();

};

// 每当应用程序首次执行时都要调用的初始化函数

BOOL CHelloApp::InitInstance()

{

m_pMainWnd = new CHelloWindow();

m_pMainWnd->ShowWindow(m_nCmdShow);

m_pMainWnd->UpdateWindow();

return TRUE;

}

// 窗口类的构造函数

CHelloWindow::CHelloWindow()

{

// 建立窗口本身

Create(NULL,

  "Hello World!",

  WS_OVERLAPPEDWINDOW,

  CRect(0,0,200,200));

// 建立静态标签

cs = new CStatic();

cs->Create("hello world",

  WS_CHILD|WS_VISIBLE|SS_CENTER,

  CRect(50,80,150,150),

  this);

} 这样就出来了。

>

1、首先输入代码:

int result =MessageBox( TEXT("提示的内容") , TEXT("提示的内容") ,MB_YESNO);

switch(result)

2、然后再输入下面的代码:

{

case IDYES:

{

//点击YES按钮的具体实现功能

CMFCExampleDoc pVitaHypDoc =GetDocument();

pVitaHypDoc->getPostDoc()->getMesh()->DeleteAllData();

pVitaHypDoc->getPostDoc()->getResult()->clearData();

pVitaHypDoc->getTestDoc()->getMesh()->DeleteAllData();

pVitaHypDoc->getTestDoc()->getResult()->clearData();

pVitaHypDoc->getGroupManager()->removeAll();

pVitaHypDoc->m_vectorSensorLoadCaseManagerclear();

pVitaHypDoc->FlushAllSegment();

pVitaHypDoc->ClearCustomNotes();

UpdateCustomNote();

pVitaHypDoc->updateTxtNodes(NULL);

pVitaHypDoc->updateHoopsModel();

UpdateView();

((CMainFrame)AfxGetMainWnd())->m_wndClassViewFillClassView();

((CMainFrame)AfxGetMainWnd())->m_wndFileViewFillFileView();

break;

}

case IDNO:

break;

}

3、然后这样就可以了。

1、 文件名Apph (cpp)应用程序类

CMyApp的基类是CWinApp,而CWinApp的基类又是CWinThread,CWinThread类是用来完成对线程(见后面的名词解释)的控制,包括对线程的创建、运行、终止和挂起等。它实际上是Windows首先运行的内容,当这个程序开始时,它将会把主窗口放在屏幕上。C或C++是从main()主函数开始执行,而VC++是从WinMain()函数开始执行,且WinMain()函数就是隐含在此应用程序中

2、 CMainFrmh (cpp)主框架类

CMainFrm的基类是CFrameWnd,该类是显示主窗口,是我们找到菜单栏、窗口的标题栏以及工具栏的地方,主窗口对象负责窗口中出现的、围绕 *** 作领域的一切,如:图画、文本和其它图形,这个区域称为窗口中的客户区。它用于管理应用程序窗口显示如:标题栏、菜单栏、工具栏、状态栏、控制菜单、控制按钮等,它是所有MDI(多文档)和SDI(单文档)子窗口的包容器。

3、 文件名Viewh (cpp)视图类

CMyView的基类是CView,处理客户区,是我们在程序中设置数据格式及显示数据的位置,如我们在创建一个字处理程序时正在编辑的文本,事实上,视图对象是出现在客户区顶部的窗口本身,用于让用户通过窗口来访问文档、视图类。

4、 CMyDoch (cpp)文档类

CMyDoch (cpp)的基类是CDocument,为程序存储数据,将所有数据存在文档中,而在视图对象中处理并显示。它包含了应用程序在运行期间所用到的数据文档。

void Release() throw()

{

ATLASSERT( nRefs != 0 );

if( _AtlInterlockedDecrement( &nRefs ) <= 0 )

{

pStringMgr->Free( this );

}

}

以上是错误位置代码,可以看出,是在字符串释放内存的时候出现的问题,其它的就没法分析出来了,还是要调试和分析程序

SelectObject的作用是将指定GDI对象选定进入指定的DC,并作为其绘画时使用的当前对象。

请仔细看下面这段话:

确保释放DC的时候DC中的各gdi对象都不是你自己创建的!!!!确保个gdi对象在释放的时候不被任何dc选中使用!!!!

假如我们要使用gdi函数画图,正确的步骤应该如下:

a创建一个内存兼容dc(CreateCompatibleDC)

b创建一个内存兼容bitmap(CreateCompatibleBitmap)

c关联创建的内存兼容dc和bitmap(SelectObject)

d画图

eBitBlt到目的dc上

f断开内存兼容dc和bitmap关联(SelectObject)

g销毁内存兼容bitmap

h销毁内存兼容dc

由于SelectObject在选入一个新的gdi对象的时候会返回一个原来的gdi对象(假如成功的话),所以需要在步骤c的时候保存返回值,在步骤f的时候当作入口参数使用还有,步骤g和步骤h实际上顺序可以随意,因为他们两个此刻已经没有关系了,但是为了结构清晰,我建议按照 "先Create的后释放,后Create的先释放 "的原则进行

关于步骤f,可能会有争议,因为即使省略这一步,步骤g和步骤h看起来照样可以返回一个成功的值但实际上可能并没有执行成功,至少boundschecker会报告有错,错误信息大致是说,在释放dc的时候还包含有非默认的gdi对象,在释放gdi对象的时候又说这个gdi对象还被一个dc在使用所以,我建议保留步骤f

以上就是关于怎样用MFC做一个图形界面程序全部的内容,包括:怎样用MFC做一个图形界面程序、求助:使用 MFC 开发图形界面程序、MFC怎么d出对话框或者警告框等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9501359.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存