c++ mfc教程(如何在Visual C++中创建mfc窗体程序)
本文目录
- 如何在Visual C++中创建mfc窗体程序
- 求MFC教程,关于进程的例如:编写程序像任务管理器那样获得某个进程的句柄数,和线程数
- MFC入门书籍
- C++如何调用MFC库谁给个简单的例子
- c++中怎么使用MFC
- 如何在Visual Studio 2015中创建MFC窗体应用
- C++ MFC 如何获取和设置控件属性,比如获取button的caption
- C++中实现MFC风格的TRACE
- C++ mfc 新建excel文件
如何在Visual C++中创建mfc窗体程序
MFC AppWizard 当然是这个,。另外两个都是有一定经验的人做的,呵呵。你最好是找本书吧,那些书都讲得挺详细的,自己摸索也有的时候可不好办哦,等你到了 一定水平就可以自己摸索了。
求MFC教程,关于进程的例如:编写程序像任务管理器那样获得某个进程的句柄数,和线程数
#include 《TlHelp32.h》#include 《pdh.h》#pragma comment(lib,"pdh.lib")#include 《PSAPI.H》#pragma comment(lib,"psapi.lib")// 返回指定进程的句柄数BOOL EnableDebugPrivilege(BOOL fEnable){ BOOL fOK = FALSE; HANDLE hToken = NULL; if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)){ TOKEN_PRIVILEGES tp; tp.PrivilegeCount =1; LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges.Luid); tp.Privileges.Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0; AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL); fOK = (GetLastError()==ERROR_SUCCESS); CloseHandle(hToken); } return fOK;}DWORD GetProcHandleCount(HANDLE hProcess){ if(!EnableDebugPrivilege(TRUE)) { return 0; } HANDLE hQuery=NULL; PdhOpenQuery(NULL,0,&hQuery); if(NULL==hQuery) { return 0; } HANDLE hCounter=NULL; char szProcessName = "unknown"; HMODULE hMod=NULL; GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) ); char szName=""; _tsplitpath(szProcessName,NULL,NULL,szName,NULL); char szCounterPath=""; sprintf(szCounterPath,"\\Process(%s)\\Handle Count",szName); PdhAddCounter(hQuery,szCounterPath,0,&hCounter); if(NULL==hCounter || INVALID_HANDLE_VALUE==hCounter) { PdhCloseQuery(hQuery); return 0; } DWORD nHandles=0; if(ERROR_SUCCESS==PdhCollectQueryData(hQuery)) { PDH_FMT_COUNTERVALUE pdhfmtHandles; if(ERROR_SUCCESS==PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &pdhfmtHandles)) nHandles = DWORD(pdhfmtHandles.longValue); } if(NULL!=hCounter && INVALID_HANDLE_VALUE!=hCounter) PdhRemoveCounter(hCounter); if(NULL!=hQuery && INVALID_HANDLE_VALUE!=hQuery) PdhCloseQuery(hQuery); EnableDebugPrivilege(FALSE); return nHandles;}转载的 试一试
MFC入门书籍
《VC++深入详解》和侯捷《深入浅出mfc》都是入门的必看书籍,没有哪个更好,看你更喜欢哪本书的表述方式。其它较好的书籍还有:
1、《windows程序设计》,讲win32 api的,了解了这个再看mfc会容易一点。
2、鸡啄米的《MFC教程》,对比学习,一般的控件基本都会用的。
3、《windows核心编程》,重中之重,要多看几遍。
MFC(英语:Microsoft Foundation Classes)是微软基础类库的简称,微软公司实现的一个c++类库,主要封装了大部分的windows API函数,vc++是微软公司开发的c/c++的集成开发环境,所谓集成开发环境,就是说利用它可以,编译,调试,而不是使用多种工具轮换操作,灵活性较大。
MFC除了是一个类库以外,还是一个框架,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西。
由于是通用框架,没有最好的针对性,当然也就丧失了一些灵活性和效率。但是MFC的封装很浅,所以效率上损失不大。
C++如何调用MFC库谁给个简单的例子
很简单啊!vc++里有自带!你可以试一试过程如下:文件 新建 选择MFC 就可以了相应的增加按钮
c++中怎么使用MFC
定义一个中文标点符号集合,然后扫描文档每个字符,如能在集合中搜到则用空格代替,否则不做处理
如何在Visual Studio 2015中创建MFC窗体应用
我们在使用Visual Studio 2015创建桌面应用的时候,最经常遇到的就是Winform和MFC了,那么如何在Visual Studio 2015中创建MFC窗体应用呢?下面我给大家分享一下。
工具/材料
Visual Studio 2015
- 01
首先我们打开Visual Studio 2015软件,点击顶部的文件菜单,然后选择新建下面的项目选项,如下图所示
- 02
接下来在弹出的新建项目界面中我们定位到Visual C++下面的MFC,然后选择右侧的MFC应用程序,如下图所示
- 03
然后会打开MFC应用程序向导界面,我们选择应用程序类型为单个文档,如下图所示
- 04
接着在复合文档支持界面中将复合文档支持类型选择为无,如下图所示
- 05
接下来会进入文档模板属性界面,这里需要给文件扩展名起一个名字,大家根据自己的情况随便起即可,如下图所示
- 06
然后就会进入数据库支持设置界面,由于这里并没有使用数据库,所以勾选无,如下图所示
- 07
接下来就进入到用户界面功能选择页了,我们需要根据自己的实际情况选择使用哪些功能,如下图所示
- 08
最后运行MFC应用程序,我们就会看到如下图所示的MFC窗体应用了,到这里在Visual Studio中创建MFC窗体应用程序就创建完了
C++ MFC 如何获取和设置控件属性,比如获取button的caption
首先要知道这个控件的ID,通过ID来访问控件要想获得控件上的文本,可以用GetDlgItemText这个函数函数原型是int GetDlgItemText( int nID, CString& rString ) const;第一个参数是控件的ID,第二个参数是用来接收控件文本的字符串(CString类型的)
C++中实现MFC风格的TRACE
***隐藏网址******隐藏网址***
我们知道,MFC中可以调用宏TRACE等十分方便的输出调试信息到Visual Studio输出窗口,但C++中没人类似的函数,最近我在开发一个小程序时跟踪了一下MFC的TRACE宏,发现它映像了atltrace.h中的ATLTRACE宏,因些,我们也想在C++中使用TRace可以用如下方式:
在C++中可以直接使用下面的函数:
关键点 :字符串格式化必须使用“vsprintf_s”,而不能使用“sprintf_s",“sprintf_s"的第三个参数是”...“,而不是va_list,编译不错错,但是会导致无法正确格式化数据,堆栈的地址也不对,可能导致崩溃。
C++ mfc 新建excel文件
本文简略介绍在VC++6.0中如何使用Excel2003的库函数并对其进行编程。先创建一个对话框工程,命名为VCExcel。在对话框中添加一个按钮,控件ID为ID_RUNEXCEL。 再在该按钮上添加消息BN_CLICKED,其消息映射函数为OnRunexcel()。通过一个实例来说明VC是如何调用Excel2003的接口编程的。 要编程输出一个如下表格。
格式如下: 1、表头的字体为宋体,加粗,颜色为白色,底色为深蓝,垂直水平居中对齐; 2、表中正文内容字体为宋体,颜色为深蓝,底色为灰色,垂直水平居中对齐; 3、全部边框,文本自动换行。 在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()语句之后加入如下代码:
if(CoInitialize(NULL)==0)//初始化COM库 { AfxMessageBox("初始化COM失败!"); exit(1); }
在return FALSE;语句之前加入:::CoUninitialize();//释放COM库。 为了能调用Excel的接口我们打开MFC ClassWizard-》Automation-》Add Class-》From a type library,选择\EXCEL.exe,然后把所有的类都添加进去,头文件为excel.h,源文件为excel.cpp。当然,你也可以只把一些比较常用的类如_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加进去,因为网上流传的绝大部分教程都只添加这几个类,这完全根据你个人的需要。但在本例中我们至少还要用到Interior类(设置底色),Font类(设置字体),而且这样做又简单又方便扩展功能,不管三七二十一全部弄进去吧!但这样做会有一个问题,有可能产生类的名字冲突,例如本来你自己写了一个类叫Font,当你全部添加时又再次加入了Font类,这样就重复定义了,不过可以通过名字空间来解决这个问题。再在VCExcelDlg.cpp文件的头部添加(如果系统已经自动添加就不要重复添加了):
#include "VCExcel.h" #include "comdef.h"
这样一来我们的程序就可以自由调用EXCEL了,一切准备就绪。 下面先在CVCExcelDlg中添加如下成员变量,用来操控Excel应用程序、工作簿和单元格。 A
Range m_ExlRge; _Worksheet m_ExlSheet; Worksheets m_ExlSheets; _Workbook m_ExlBook; Workbooks m_ExlBooks; _Application m_Exl
;
我们利用加载Excel模板来生成要求的表格,在本工程Debug文件夹中建立一个Excel文件,命名为Template.xls。我们的OnRunexcel()代码如下(详见注释):
void CVCExcelDlg::OnRunexcel() { // TODO: Add your control notification handler code here //用m_ExlApp对象创建Excel2003进程 if(!m_ExlApp.CreateDispatch("Excel.Application",NULL)) { AfxMessageBox("创建Excel服务失败!"); return; } //设置为可见 m_ExlApp.SetVisible(TRUE); ///////////////////下面得到应用程序所在的路径/////////////////// CString theAppPath,theAppName; char Path; GetModuleFileName(NULL,Path,MAX_PATH);//得到应用程序的全路径 theAppPath=(CString)Path; theAppName=AfxGetApp()-》m_pszAppName; theAppName+=".exe"; //把最后的文件名去掉 int length1,length3; length1=theAppPath.GetLength(); length3=theAppName.GetLength(); theAppPath.Delete(length1-length3,length3); //////////////////////////////////////////////////////////////// CString TempPath=""; TempPath=theAppPath+"Template.xls";//EXCEL模板的路径 m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE); m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载EXCEL模板 m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面 //添加新的Sheet页面 m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing); //删除第二个Sheet页面 m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE); m_ExlSheet.Delete(); //把第一个Sheet页面的名字改变为TestSheet m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE); m_ExlSheet.SetName("TestSheet"); ///////合并第一行单元格A1至D1////// //加载要合并的单元格 m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")),TRUE); m_ExlRge.Merge(_variant_t((long)0)); ////////设置表格内容//////// m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加载所有单元格 m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("数学系研究生课程统计")); m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t("课程名")); m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("课时")); m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("难度")); m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t("教学方式")); m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t("泛函分析")); m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t("60")); m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)3),_variant_t("普通")); m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)4),_variant_t("老师讲课")); m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)1),_variant_t("微分流形")); m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)2),_variant_t("40")); m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)3),_variant_t("变态难")); m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)4),_variant_t("自学")); m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)1),_variant_t("二阶椭圆型方程与方程组")); m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)2),_variant_t("60")); m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)3),_variant_t("很难")); m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)4),_variant_t("讨论")); m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());//加载已使用的单元格 m_ExlRge.SetWrapText(_variant_t((long)1));//设置单元格内的文本为自动换行 //设置齐方式为水平垂直居中 //水平对齐:默认=1,居中=-4108,左=-4131,右=-4152 //垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107 m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108)); m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108)); ///////设置整体的字体、字号及颜色////// Font ft; ft.AttachDispatch(m_ExlRge.GetFont()); ft.SetName(_variant_t("宋体"));//字体 ft.SetColorIndex(_variant_t((long)11));//字的颜色 ft.SetSize(_variant_t((long)12));//字号 ///////////设置标题字体及颜色////////// m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1"))); ft.AttachDispatch(m_ExlRge.GetFont()); ft.SetBold(_variant_t((long)1));//粗体 ft.SetSize(_variant_t((long)13)); ft.SetColorIndex(_variant_t((long)2)); CellFormat cf; cf.AttachDispatch(m_ExlRge.GetCells()); //////////////设置底色///////////////// Interior it; it.AttachDispatch(m_ExlRge.GetInterior()); it.SetColorIndex(_variant_t((long)11));//标题底色 ////表格内容的底色//// m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A2"),_variant_t("D5"))); it.AttachDispatch(m_ExlRge.GetInterior()); it.SetColorIndex(_variant_t((long)15)); //////////////为表格设置边框///////////// Range UnitRge; CString CellName; for(int i=1;i《=4;i++) { for(int j=1;j《=4;j++) { CellName.Format("%c%d",j+64,i);//单元格的名称 UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));//加载单元格 //LineStyle=线型 Weight=线宽 ColorIndex=线的颜色(-4105为自动) UnitRge.BorderAround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtMissing);//设置边框 } } //释放对象(相当重要!) m_ExlRge.ReleaseDispatch(); m_ExlSheet.ReleaseDispatch(); m_ExlSheets.ReleaseDispatch(); m_ExlBook.ReleaseDispatch(); m_ExlBooks.ReleaseDispatch(); //m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错 m_ExlApp.ReleaseDispatch(); //退出程序 m_ExlApp.Quit(); }
更多文章:
wakelock acquire(wakeLock为什么唤醒后请求网络只有第一次可以)
2024年7月14日 01:24
易语言模块怎么写(如何制作易语言的皮肤模块以及易语言皮肤模块的使用)
2024年6月29日 09:08
progress进度条app(如何 使用 ProgressBar 进度条)
2024年7月18日 08:29
java开发工作流程(java程序员入门都需要经历哪些阶段)
2024年8月4日 05:05
hbase hive(安装hive之前需要安装hbase吗)
2024年7月20日 18:21
toolbar翻译(google toolbar上的翻译功能在哪儿)
2023年12月26日 07:20
html学到什么程度可以工作(自学前端学到什么程度可以找工作)
2024年7月12日 02:52
fontcreator调整字体间距(high-logic fontcreator如何修改字体大小)
2024年8月10日 17:35
discuz手机客户端(discuz论坛怎么制作安卓和苹果APP啊)
2024年7月10日 09:57