DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 541 评论 :: 1614万 阅读
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

06 2012 档案

摘要:以前写过类似的函数,最近又用到了,简单总结一下,以备后用。1 StrToInt 此函数将编辑框中输入的字符串,如“1001”,转化为十进制数字,如1001。int StrToInt(const char* str){int num = 0;BOOL RIGHT = FALSE;if(str!=NULL){ const char* digit = str; while((* digit != '/n')) { if(*digit >= '0' && *digit <= '9') { num = num * 10 +(*d 阅读全文
posted @ 2012-06-28 20:11 DoubleLi 阅读(932) 评论(0) 推荐(0) 编辑

摘要:1 DAO简介 DAO(数据访问对象)是一种应用程序编程接口(API),存在于微软的Visual Basic中,它允许程序员请求对微软的Access数据库的访问。DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。在VC中,它是从Visual C++4.0版开始引入的。2 DAO和ODBC的比较2.1 相似点MFC的DAO类和ODBC类有很多相似之处,主要有两点:1) 都支持对各种ODBC数据源的访问。2) 提供了功能相似的MFC类。例如DAO的CDaoDatabase类对应于ODBC的CData 阅读全文
posted @ 2012-06-28 20:08 DoubleLi 阅读(2588) 评论(0) 推荐(0) 编辑

摘要:本文介绍使用MFC DAO访问数据库的一个实例,其中实例来源于网络。实例同样实现了对数据库的基本操作:添加、修改、删除和遍历。与ODBC实例中不同的是,ODBC使用过程中添加了一个从CRecordset派生而来的CBook类,负责成员数据与数据表字段的关联,而本实例则是直接使用CDaoRecordset类。无论是使用ODBC还是DAO访问数据库都可以使用这两种方法,本实例采用后者来实现。下面就来介绍这个实例的实现细节。1) 定义数据库对象,并连接到指定数据库。// 定义成员变量 CDaoDatabase db ;// 在主对话框初始化过程中连接数据库 this->db.Open ( L& 阅读全文
posted @ 2012-06-28 20:07 DoubleLi 阅读(1627) 评论(0) 推荐(0) 编辑

摘要:欲在。EXE 中调用PRO.DLLPRO.DLL中函数如:long MenuExecute( char *, long , HWND , long , char *, long , void * );在.EXE端程序:HINSTANCE hPro= ::LoadLibrary("Pro.dll"); if(hPro == NULL){ return;}else{ typedef long (*MENU_EXECUTE)( char *, long , HWND , long , char *, long , void * ); MENU_EXECUTE mebu = NUL 阅读全文
posted @ 2012-06-28 20:01 DoubleLi 阅读(1340) 评论(0) 推荐(0) 编辑

摘要:1 在多文档多视图的MFC架构中,要想获得当前选中的CView可重写CView::OnActivateView函数,如下:void OnActivateView(BOOL bActivate, CView * pActivateView, CView * pDeactiveView) { if(bActivate){ SetEnable(TRUE);}else{ SetEnable(FALSE);} CView::OnActivateView(bActivate, pActivateView, pDeactiveView); } ... 阅读全文
posted @ 2012-06-28 19:50 DoubleLi 阅读(8226) 评论(0) 推荐(0) 编辑

摘要:/*try{ ProTestMode(FALSE, FALSE);}catch(CException *e){TCHAR szCause[1024];e->GetErrorMessage(szCause,1024);TRACE(_T("Exception: %s/n"),szCause);//AfxMessageBox(szCause);}*/ 阅读全文
posted @ 2012-06-28 19:47 DoubleLi 阅读(196) 评论(0) 推荐(0) 编辑

摘要:xcopy $(SolutionDir)/PreBuild/Share $(SolutionDir)/Debug/ /s /e /c /yxcopy $(SolutionDir)/PreBuild/Debug $(SolutionDir)/Debug/ /s /e /c /yxcopy $(SolutionDir)/PreBuild/Release $(SolutionDir)/Release/ /s /e /c /yxcopy $(SolutionDir)/PreBuild/Share $(SolutionDir)/Release/ /s /e /c /yif $(Configuration 阅读全文
posted @ 2012-06-28 19:45 DoubleLi 阅读(890) 评论(0) 推荐(0) 编辑

摘要:对预编译头文件说明如下:所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h" 阅读全文
posted @ 2012-06-28 19:35 DoubleLi 阅读(233) 评论(0) 推荐(0) 编辑

摘要:使用MFC的控件时,如EDIT控件,添加变量时有两种类型:VALUE和CONTROL;两种变量的区别如下:1 VALUE是有个变量和这个控件关联,例如编辑框,你输入东西后,updatedata(),就会把输入的东西传给这个变量;2 CONTROL是建了一个控件的实例,就像类实例,可以用控件的实例来控制该控件的行为,从而使用其方法。这就是变量和类实例的区别。 阅读全文
posted @ 2012-06-28 19:23 DoubleLi 阅读(1212) 评论(0) 推荐(0) 编辑

摘要:Settimer是设置一个计时器并开始执行计时器Ontimer中的代码,Ontimer是计时器所执行的代码。KillTimer用于停止计时器。 Settimer是设置,Ontimer是响应Settimer消息的。 SetTimer函数的用法1 )用WM_TIMER来设置定时器先请看SetTimer这个API函数的原型UINT_PTR SetTimer( HWND hWnd,//和定时器相关联的窗口 UINT_PTR nIDEvent,//一个非0的数字标志这个定时器 UINT uElapse,//指定时间间隔,以毫秒为单位 TIMERPROC lpTimerFunc//... 阅读全文
posted @ 2012-06-28 19:21 DoubleLi 阅读(25155) 评论(1) 推荐(0) 编辑

摘要:void GetClientRect( LPRECT lpRect) const;作用:把CWnd客户区的客户坐标复制到lpRect指向的结构体中。返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。lpRect:指向RECT结构体或CRect类的指针,接受客户区的坐标。因为此坐标是相对于CWnd客户区的左上角,故总是得到(0,0,宽度,高度)。GetClientRect()得到的是客户区的矩形,不包括标题栏,外框。GetWindowRect()得到的是整个窗口的矩形。总结:相同点:GetclientRect和GetWindo 阅读全文
posted @ 2012-06-27 14:30 DoubleLi 阅读(1231) 评论(0) 推荐(0) 编辑

摘要:WM_CREATE和WM_INITDIALOG消息响应函数之区别,以及MFC应用程序中处理消息的... 在响应WM_CREATE消息响应函数的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。因此在此消息响应函数中无法对控件进行修改和初始化。 而WM_INITDIALOG消息响应函数是在程序运行时,当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息。因此可以在WM_INITDIALOG消息响应函数中添加对编辑框控件的初始化和修改。 阅读全文
posted @ 2012-06-26 11:16 DoubleLi 阅读(292) 评论(0) 推荐(0) 编辑

摘要:MFC应用程序中处理消息的顺序1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数3.WindowProc() 该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNot 阅读全文
posted @ 2012-06-26 11:08 DoubleLi 阅读(319) 评论(0) 推荐(0) 编辑

摘要:1. Create 2. PreCreateWindow 3. PreSubclassWindow 4. PreTranslateMessage 5. WindowProc 6. OnCommand 7. OnNotify 8. OnChildNotify 9. DefWindowProc 10. DestroyWindow 11. PostNcDestroy CWnd作为MFC中最基本的与窗口打交道的类,完成了大部分窗口管理任务。同时提供了很多虚拟函数,这些虚拟函数在适当的地方提供了供派生类参与管理的接口。 一直以来,对这些虚拟函数的来龙去脉有所糊涂,无法明确的判断他们在什么时候调用,又缺省 阅读全文
posted @ 2012-06-26 10:42 DoubleLi 阅读(605) 评论(0) 推荐(0) 编辑

摘要:以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn--------------------------------------------------------------------------------1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理. 阅读全文
posted @ 2012-06-12 17:17 DoubleLi 阅读(984) 评论(1) 推荐(1) 编辑

摘要:第三步设置风格1、通过第一步和第二步,我们已经创建出了一个有一行并且有四列的内容的REPORT风格的List Control。可是,只是简单的方框中有一行数据而已,我们能不能让它们看起来更漂亮呢?或者我们能不能让它们可以被选取从而让我们可以做一些别的操作呢?当然可以,这一步我们就来看看简单的风格设置。2、要学习风格设置,我们首先来看一个函数:CListCtrl::SetExtendedStyleDWORD SetExtendedStyle(DWORD dwNewStyle)返回值:返回列表视图控件使用的以前扩展风格的组合。参数: dwNewStyle 列表视图控件使用的扩展风格的组合。若希望进 阅读全文
posted @ 2012-06-08 14:48 DoubleLi 阅读(6066) 评论(0) 推荐(0) 编辑

摘要:第二步创建第一行1、在上一节中我们创建了一个列,那我们可以按照同样的方法多创建几个列。在 m_ListCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 90); 代码后边添入下列三行代码: m_ListCtrl.InsertColumn(1,_T("性别"),LVCFMT_LEFT,40); m_ListCtrl.InsertColumn(2,_T("联系方式"),LVCFMT_LEFT,160);m_ListCtrl.InsertColumn(3,_T("备注"),LVCFM 阅读全文
posted @ 2012-06-08 14:47 DoubleLi 阅读(1462) 评论(0) 推荐(0) 编辑

摘要:第一步:创建一个列注:开发平台为VS2008.NET。1、创建一个MFC应用程序,选择基于对话框的。具体步骤如下:文件à新建à项目àVisual C++àMFCàMFC应用程序,在下方名称中输入你自己想要建立的项目名,此处为ListCtrl。在MFC应用程序向导中选择引用程序类型,然后在窗口右边应用程序类型中选择基于对话框,然后选择完成。2、进入项目,可以直接看到建立好的一个对话框,将对话框中部的“TODO:在此放置对话框删除”。3、从工具箱中拖一个List Contrrol到对话框上,调节大小到自己满意的状态。4、将控件(一般ID为IDC_L 阅读全文
posted @ 2012-06-08 14:46 DoubleLi 阅读(2867) 评论(0) 推荐(0) 编辑

摘要:关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还未对它进行赋值。 第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回... 阅读全文
posted @ 2012-06-06 23:45 DoubleLi 阅读(389) 评论(0) 推荐(0) 编辑

摘要:在大学大一的时候学的是C,然后后来大二的时候专业又开了C++这个课程,然后再后来自己又自学了一点VC++,大三的时候也试着编写过一个MFC的最简单的窗口程序。到大四的时候,自己又做了一个GIS的项目,是用C#.NET来编写的,然后发现C#上手好容易,而且还大部分语法规则都沿用了C,C++的习惯,于是觉得C++实在是没有一点优势可言啊。但这个暑假的实习经历又改变了我的观点:C++在写窗口程序虽然麻烦,但是却什么能做,而且对比C#来说,对运行环境的要求不高,不用像C#程序在安装之前还要安装100M多的运行.NET环境。C++和C#各有优缺,目前我对它们俩的定位是:C++用来写一些底层的程序,比如驱 阅读全文
posted @ 2012-06-05 15:27 DoubleLi 阅读(647) 评论(1) 推荐(1) 编辑

摘要:调试方法:【dll工程和调用dll的exe工程在同一个解决方案中】dll工程,属性-配置属性-调试-把 命令 为 调用该dll的exe工程的bin\Debug\*.exedll工程,属性-配置属性-调试-把 调试器类型 设置为 仅限本机dll工程,属性-配置属性-常规-把输出目录设置为 调用该dll的exe工程的bin\Debug目录下在dll工程中打好断点,然后重新生成dll工程,为了输出dll到设置的目录下然后exe工程,属性-调试-启用非托管代码调试exe工程,设置为启动项目好了运行,OK上面的步骤是参考了网上很多资料总结出来的,可能有的设置没有用,不过反正全部设置OK了之后是肯定行的- 阅读全文
posted @ 2012-06-05 15:21 DoubleLi 阅读(3526) 评论(0) 推荐(0) 编辑

摘要:C++(Win 32)C#char**作为输入参数转为char[],通过Encoding类对这个string[]进行编码后得到的一个char[]作为输出参数转为byte[],通过Encoding类对这个byte[]进行解码,得到字符串C++ Dll接口:void CplusplusToCsharp(in char** AgentID, out char** AgentIP);C#中的声明:[DllImport("Example.dll")]public static extern void CplusplusToCsharp(char[] AgentID, byte[] A 阅读全文
posted @ 2012-06-05 15:18 DoubleLi 阅读(3916) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示