给你个最最简单的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出对话框或者警告框等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)