VC程序设计
文章平均质量分 60
qlping2007
我就是我
展开
-
如何在VC改变主窗口的标题
开始学习编程了。想改变主窗口的标题,只要在Doc类的OnNewDocument()函数添加下列代码:SetTitle("信息管理系统");在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)添加:m_strTitle = "Beta";之后,主窗口标题变为:“信息管理系统-Beta ” 了 ^_^原创 2008-01-23 09:16:00 · 704 阅读 · 0 评论 -
类厂IClassFactory和组件的创建
CoCreateInstance是创建组件时使用得最多的一种方法,但由于其灵活性不足以满足所有组件的需求,因此引入了类厂。所有的组件都是类厂创建的。CoCreateInstance实际上也是按照一般发方法通过类厂来创建组件的。当客户直接使用类厂时,将能够获得更高的灵活性。1. CoCreateInstance函数此函数需要一个CLSID参数来创建相应组件的一个实例,并原创 2008-04-01 14:27:00 · 3266 阅读 · 2 评论 -
组件与过程调用
每一个EXE中都有其自己的进程空间,因而不用的EXE中的组件和客户将在不同的进程中运行。DLL则与EXE不同,它将被映射到链接它们的EXE文件的进程空间中。因而,DLL也被称作进程中服务器,EXE则被称作是进程外服务器。在某些情况下,EXE也被称作是本地服务器,以同另外一种类型的运行于另外一个不同机器上的进程外服务器“远程服务器”相区别。组件将把一个接口传给客户。一个接口实际上是一个函数原创 2008-04-03 10:47:00 · 491 阅读 · 0 评论 -
接口调度和自动化
自动化是建立在COM的基础上的,它关注的是运行时的类型检查,但这一点是以速度的牺牲和编译时的类型检查为代价的。一个自动化服务器实际上就是一个实现了IDispatch接口的COM组件。而一个自动化控制器则是一个通过IDispatch接口同自动化服务器进行通信的COM客户,它通过IDispatch接口中的成员函数实现对服务器中函数的间接调用。通过COM接口提供的任何服务都可以通过IDispa原创 2008-04-03 15:29:00 · 416 阅读 · 0 评论 -
进程外组件与客户程序调用的基本模型
客户程序创建了组建对象之后,它通过接口指针调用组件对象的成员函数。但实际上,接口指针所指的是本进程中的代理对象(proxy),客户调用的是代理对象的成员函数,由代理对象通过跨进程的调用方法(LPC/RPC)与对象进程中的存根代码(stub)通信,存根代码再调用组件对象成员函数。函数返回的顺序刚好相反,由组件对象,经过存根代码和代理对象,最后返回到客户程序。在这个交互过程中,客户仍然在调用同一原创 2008-04-08 16:10:00 · 655 阅读 · 0 评论 -
用VC建立一个基本的COM程序(框架)
步骤:1. 创建新工程(1) New->Projects->MFC AppWizard(DLL)->输入工程名->OK,进入AppWizard对话框;(2) 为生成一个COM进程内组件,选中Regular DLL using MFC DLL。同时选中Automation选项。Finish。经MFC AppWizard(dll)创建得到的工程原创 2008-04-09 13:36:00 · 696 阅读 · 0 评论 -
为何在VC6中编译BCG的Examples出错?
安装完BCG,并编译之后,打开VC6,就会在创建程序向导界面中发现BCGControlBar.Pro的创建向导了。但打开安装目录Examples,找到一个demo,如BCGPCalendarDemo。用vc6打开,编译会出错。解决方法如下:1.vc6->Tools->options->directories->show directories for :include files下原创 2008-07-10 17:22:00 · 933 阅读 · 0 评论 -
先装了BCG,如何配置后来安装的vs2005?
1. 在vs2005中进行如下设置:工具->选项->项目和解决方案->VC++目录在包含文件中添加一条新的记录:安装目录>/BCGCBPro在库文件中添加一条新的记录:安装目录>/Bin2. 在的安装目录>/bin中找到BCGCBPROXXXd.dll及BCGCBPROXXX.dll(XXX表示版本号)复制一份到system32目录下3.原创 2008-07-10 17:17:00 · 1553 阅读 · 0 评论 -
VC++中文本文件的读写及处理
在View中添加了以下两个函数,第一个函数用于逐行读出Text文件中的以逗号隔开的数据,并进行简单的处理——使得每行中第一个逗号前的数据以1为后缀,第二个逗号前的数据以2为后缀,以此类推;第二个函数用来将处理后的结果保存到一个新的文件中。std::vector CDataPreprocessView::DataPreprocess(){原创 2008-05-23 17:06:00 · 1272 阅读 · 2 评论 -
VS2005 CString转换成const char*的问题
在vs2005下建立MFC工程,发现总出现字符串无法转换成XXX的问题,后来发现这是由于在vs2005下建立的MFC工程都是默认使用unicode字符集的,可以在工程属性中修改此设置为使用多字节字符集。 如果要在unicode下将CString转换成const char*则可以使用以下方法: CString cstring; const c原创 2008-09-02 10:18:00 · 2913 阅读 · 3 评论 -
在.net中建立一个简单的GDI+程序框架
建立一个GDI+程序分四个步骤进行:1. 在项目中引入GDI+头文件,使用GDI+的命名空间;2. 初始化GDI+系统资源3. 使用完毕后,释放GDI+所使用的资源4. 在比阿一是加入GDIplus.lib库文件。下面我们在.NET中建立一个简单的GDI+程序来说明这四个步骤。1. 建立新MF原创 2008-06-24 11:45:00 · 365 阅读 · 0 评论 -
MDI下新建一个窗口显示数据处理的结果
有时候对某个窗口内的数据进行处理之后,会希望在新的窗口中显示结果。假设对数据进行处理后得到的结果放在vector类型的变量vecString里面,且CFIRDoc拥有一个成员vector类型的成员变量m_vecFileString 。下面新建一个窗口并显示处理的结果,主要的代码如下: CFIRApp* pApp = (CFIRApp*)AfxGetApp(); POSITION原创 2009-03-15 16:27:00 · 434 阅读 · 0 评论 -
继承了CScrollView,为何没有出现滚动条?
出现这个问题的原因,是因为还没有修改相应的设置要在OnInitialUpdate()函数中修改以下内容: CSize sizeTotal; // TODO: calculate the total size of this view// sizeTotal.cx =100=sizeTotal.cy = 100 sizeTotal.cx =100; sizeTotal.cy = 1000原创 2009-03-11 18:08:00 · 1123 阅读 · 0 评论 -
覆盖和重写
重载(OverLoading) 重载的函数出现在相同的作用域中,具有相同的名字,不同的形参列表。一般用于在一个类中实现若干个方法,这些方法的名字相同而参数的形式不同。规则:1.只能通过相同的方法名、不同的形参来实现。不同的形参指的是参数的类型、个数和顺序(有多个不同类型的参数,以不同的顺序出现)的不同。2.不能基于不同的返回类型、访问权限和抛出的异常实现重载。3.方法抛出的异常原创 2009-04-07 10:06:00 · 1834 阅读 · 2 评论 -
[VC++]限制CEdit(Edit Contrl)只能输入数字和小数点
有时候我们在Edit框中需要对用户的输入进行限制,允许输入数字和小数点。下面的代码放在OnEnChangeEditXXX()函数中,可实现此功能。 (如果只允许输入正整数,那么直接把空间的属性“Number”设为True就可以了,不需要在添加一下代码。) CString csAreaS; GetDlgItem( IDC_EDIT_AREA_S )->GetWindowTe原创 2009-08-12 12:54:00 · 4221 阅读 · 3 评论 -
引用计数和AddRef、Release
AddRef和Release实现的是一种名为引用计数的内存管理技术,这种技术是使组件能够自己将自己删除的最简单同时也是效率最高的方法。COM组件将维护一个称作是引用计数的数值。当客户虫组件取得一个接口时,此数值增1,当客户使用完某个接口后,此数值将减1。当此数值为0时,组件即可将自己从内存中删除。为正确的使用引用计数,需要了解一下三条规则:(1) 在返回之前原创 2008-03-31 10:05:00 · 3495 阅读 · 4 评论 -
HRESULT和GUID
HRESULT HRESULT类型并不是一个指向某个结果的句柄,它实际上是一个可分成三个域的32位值,三个部分的含义如图1: 系统所生成的HRESULT值在Win32的头文件WINERROR.h中有定义。如图1,HRESULT值中最重要的比特位表示函数调用是否成功。这种设计是的函数可以返回多个表示成功或失败的代码。HRESULT的低16为包含的就是函数的返回代码,其原创 2008-03-31 14:24:00 · 531 阅读 · 0 评论 -
在VC中使用ADO实现Access数据库的连接、查询及断开
在登录界面,需要根据用户输入的用户名和密码,检验其合法性。因此,使用VC的ADO技术来编写函数ValidateUser,实现此功能。首先,为了在VC++6.0中使用ADO,必须 StdAfx.h头文件中包含以下代码:#import"C:/program files/common files/system/ado/msado15.dll" no_namespace/ rename("EOF"原创 2008-01-23 09:34:00 · 1577 阅读 · 2 评论 -
VC++提供的数据库访问技术
VC++主要提供以下几种数据库访问技术: ODBC(Open DataBase Connectivity) MFC ODBC (Microsoft Foundation Class ODBC) DAO (Data Access Objects)原创 2008-02-19 09:36:00 · 655 阅读 · 0 评论 -
动态启动和停止计时器――MFC
在程序中我们往往需要使用计时器,此程序就是实现计时器动态启动和停止的一个例子。程序运行时,nCount不停的增加1直到变成1000。用一个进度条显示完成的百分比。点击Start按钮,nCount开始自增,进度条满之前如果点击Cancel,nCount归零并清空进度条。进度条为零且未Start,Cancel可以退出对话框。1. 创建如下名对话框,并创建相应的CComputDlg类原创 2008-02-22 17:00:00 · 2174 阅读 · 3 评论 -
MFC中的菜单、工具栏及重组工具栏
如何创建与菜单相关联的工具栏?1. 在资源编辑器编辑主菜单,增加相应的菜单项。如在菜单Draw下标题为Circle,id为ID_DRAW_CIRCLE的菜单项,并在属性对话框中的Prompt框中输入想要显示的文本,如Draw a Circle/nCircle。前面将在状态栏中显示,/n后面是工具提示。2. 使用资源编辑器编辑更新应用程序的工具栏。展开Tool原创 2008-02-26 14:03:00 · 1132 阅读 · 1 评论 -
SDI到MDI的转换
新MDI程序可以使用与原SDI同样的文档和视图发爱马,以及同样的资源(除了程序名以外)。但应用程序代码和主框架类代码是不同的。步骤:1. 修改应用程序类InitInstance()函数中的文档模板,并创建MDI框架窗口: CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMulti原创 2008-02-28 15:23:00 · 610 阅读 · 0 评论 -
文档的读写与打开方式及视图
对话框模态对话框:用户在打开一个对话框如“打开文件”对话框后,在退出此对话框时无法在程序的其他地方工作。非模态对话框:则可以。对话数据交换和确认函数:DDX和DDV 文档与视图文档对象容纳数据,而视图对象显示这些数据并允许编辑。文档与视图的五个重要的成员函数:CView::GetDocument():从视图得到与之相关联的文档。CDocument::Update原创 2008-02-28 11:52:00 · 689 阅读 · 0 评论 -
窗口的拆分及多重视图MDI应用程序
拆分窗口在运行AppWizard的第四步中选择Advanced选项,在Window Styles选项卡下选中Use Split Window,就可以产生拆分窗口的代码,在查看菜单下将多一个菜单项:分隔。 静态拆分编辑BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext*原创 2008-02-29 13:46:00 · 598 阅读 · 0 评论 -
动态链接库
动态链接库是“运行时”模块,而类是“创建时”模块。在编写大的EXE程序时,我们要在每次修改后重新编译并测试。但,我们可以创建较小的DLL模块,并单独进行测试,客户程序可以在运行时很快的装载并连接这些DLL。 DLL的基础理论我们知道,进程是在磁盘上以exe文件启动的正在运行的程序示例。一般来说,DLL是磁盘上的文件,它由全局数据、编译的函数及资源组成,并成为进程的一部分。原创 2008-03-04 13:33:00 · 498 阅读 · 0 评论 -
[VC++]如何让MSChart的饼图显示百分比
当用饼图显示数据的时候,我们往往希望在饼图显示数据的百分比情况。以下为实现这个功能的3个步骤://设置百分比显示的位置:在饼图外 m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(6); m_Chart.GetP原创 2008-03-21 11:12:00 · 3207 阅读 · 1 评论 -
在VC++中用CMSChart实现实时曲线的绘制(实例)
本例子是在MFC中实现的:利用计时器每个一段时间产生一个随机数,并插入到曲线图中显示,如果图中的数据点大于30个,则在插入新数据的同时,删除下标最小的数据点。实时曲线图显示在对话框中。以下是三个主要的函数。函数一:初始化曲线图void RealChartDlg::InitChart(){ //设置标题 m_Chart.SetTitleText(LPCTSTR("实原创 2008-03-22 21:52:00 · 6567 阅读 · 9 评论 -
在VC++中使用MSChart表格控件(小结)
1. 在工程中添加MSChart控件Project—〉Add to Project—〉Registered ActiveX Controls,选中Microsoft Chart Control 6.0(SP4)(OLEDB)点击Insert,一路确定2. 在用到控件的地方加上相应的头文件,mschart.h,还有其他比较常用的头文件:#includ原创 2008-03-21 09:22:00 · 2936 阅读 · 1 评论 -
COM和接口
1. 什么是COM?COM是关于如何建立组件以及如何通过组件构建应用程序的一个规范。遵循COM规范编写的组件将能够满足对组件架构的所有需求。且所有的组件必须满足两个条件:动态链接和信息封装。COM组件是由以Win32动态链接库(DLLs)或可执行文件(EXEs)的形式发布的可执行代码组成的。但是将COM和DLL相提并论是不合适的,因为实际上COM只是使用了DLL来实现组件的动态链原创 2008-03-28 12:43:00 · 513 阅读 · 0 评论 -
虚拟函数表和C++抽象基类
最近在看《COM技术内幕》,看到虚拟函数与C++的抽象基类。将一些主要的内容摘录了下来,以懂非懂,抛砖引玉,希望对看到的人有帮助。同时,以备后忘。呵呵呵呵。1. 虚拟函数表为什么用C++的纯抽象基类来实现COM接口是可行的呢?这主要是由于纯抽象类说定义的内存结构可以满足COM对接口的需求。当定义一个纯抽象基类时,实际上第一的是一个内存块的结构,且其所有的原创 2008-03-29 12:10:00 · 1047 阅读 · 1 评论 -
IUnkown接口和QueryInterface函数
1. IUnkown接口客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是Iunkown,它的定义包含在Win32 SDK中的UNKOWN.h头文件中。interface IUnkown{ virtual HRESULT __stdcall QueryInterface(const IID& iid, void**原创 2008-03-29 14:21:00 · 1736 阅读 · 0 评论 -
[转载]关于获得MFC窗口其它类指针的方法
访问应用程序的其它类获得CWinApp: -在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp -在其它类中只能用AfxGetApp() 获得CMainFrame: -在CMinApp中用AfxGetMainWnd()或者m_pMainWnd -在CChildFrame中可用GetParentFrame()原创 2009-08-14 09:48:00 · 345 阅读 · 0 评论