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

11 2012 档案

摘要:C++中嵌入ie浏览器总结(1) - ie边框 及上下文菜单 最近项目中用html 来做界面,也就折腾了一下在wxwidget中嵌入浏览器的若干细节工作,mfc也基本是类似的,由于wxwidget中已经做了一个封装wxie,但是开发过程中也遇到了不少问题,在此做一下总结:ie边框 及上下文菜单 普通嵌入到程序里面的浏览器页面都会有一个灰色的边框,这样放到程序里面就很难看。目前网上流行的办法添加css:body{border:0;} 但是这个方法的缺点是,必须要把页面头部的dtd申明去掉。网上的错误提法是类似以下链接的:http://www.faceker.com/200801/webbrows 阅读全文
posted @ 2012-11-29 23:25 DoubleLi 阅读(1047) 评论(0) 推荐(0) 编辑

摘要:一、基本概念: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。二、运行机制:1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联... 阅读全文
posted @ 2012-11-29 21:00 DoubleLi 阅读(29851) 评论(2) 推荐(1) 编辑

摘要:1.独立代码//-----------开始---------------------//#include <atlbase.h>#include <Mshtml.h>#include <winuser.h>#include <comdef.h>#include <string.h>void EnumIE(void);//处理网页void EnumFrame(IHTMLDocument2 * pIHTMLDocument2);//处理框架void EnumForm(IHTMLDocument2 * pIHTMLDocument2);// 阅读全文
posted @ 2012-11-27 21:05 DoubleLi 阅读(5069) 评论(0) 推荐(0) 编辑

摘要:1.独立代码//-----------开始---------------------//#include <atlbase.h>#include <mshtml.h>#include <winuser.h>#include <comdef.h>#include <string.h>void EnumIE(void);//处理网页CComModule _Module; //使用CComDispatchDriver ATL的智能指针,此处必须声明#include <atlcom.h>void EnumAllElement(IH 阅读全文
posted @ 2012-11-27 21:04 DoubleLi 阅读(1277) 评论(0) 推荐(0) 编辑

摘要:void CBtnDlg::OnOK() {// TODO: Add extra validation here// 动态构建按钮代码CButton* pNewButton = new CButton();// 也可以定义为类的成员变量。CRect rcButton( 10, 10, 50, 30); // 按钮在对话框中的位置。pNewButton->Create("按钮", 0, rcButton, this, 10098);pNewButton->ShowWindow(SW_SHOW); //CDialog::OnOK();}LRESULT CBtnDlg 阅读全文
posted @ 2012-11-27 21:02 DoubleLi 阅读(1868) 评论(0) 推荐(0) 编辑

摘要:本文讨论序列化 ActiveX 控件的方法。序列化是从持久性存储媒体(如磁盘文件)中读取或向其中写入的进程。Microsoft 基础类 (MFC) 库在 CObject 类中为序列化提供内置支持。COleControl 通过使用属性交换机制,将此支持扩展到 ActiveX 控件。通过重写 COleControl::DoPropExchange 实现 ActiveX 控件的序列化。在加载和保存控件对象期间调用此函数,以存储用成员变量或用带更改通知的成员变量实现的所有属性。用户可以对控件进行序列化以记录控件的状态。下列主题介绍与序列化 ActiveX 控件相关的主要问题:实现 DoPropExch 阅读全文
posted @ 2012-11-27 20:59 DoubleLi 阅读(1790) 评论(0) 推荐(0) 编辑

摘要:ActiveX,OLE是基于COM的一种应用,其文件后缀一般以dll和ocx结尾;ocx作为一种特殊的dll文件,具有一定的用户界面和事件响应,而dll文件只是方法和属性的集合。一、关于DLL的介绍 DLL,动态链接库,Dynamic Link Library的缩写,是一个包含函数和数据的模块集合,可以被其它应用程序共享的程序模块。DLL作为共享函数库的可执行文件,封装了一个或多个已被编译、链接的函数。多个进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个副本。DLL 还有助于共享数据和资源。 它和可执行文件(.EXE文件)非常类似,他们的区别在于 DLL 中虽然包含了可执行代码却不 阅读全文
posted @ 2012-11-27 20:58 DoubleLi 阅读(11672) 评论(0) 推荐(0) 编辑

摘要:1.COM基础 2.ActiveX控件及实现 3.ActiveX控件容器及实现 4.总结 1.COM基础 COM是一种组件开发技术, 它实际上是一种在二进制层上兼容的软件开发方法的规范. COM技术是与具体的编程语言无关的技术, 只要是支持COM开发的开发工具都可以用来进行COM应用开发, 而它们在二进制上兼容的要求由各个开发工具来实现, 绝大部分是由编译器实现的. COM的基础概念有以下几部分组成,1)接口的定义及实现, 2)IUnknown接口, 3)GUID (COM中所涉及的概念还有很多,具体的可以参阅其他资料 ). 下面分别简单的介绍它们. 1).接口的定义及实现 一个接口实际上就是 阅读全文
posted @ 2012-11-27 20:57 DoubleLi 阅读(1351) 评论(0) 推荐(0) 编辑

摘要:摘要: 本文对COM组件中的ActiveX控件的MFC开发方法进行了介绍,讲述了用户自定义和库存属性、方法以及事件的添加方法和属性页的制作过程。使读者能够掌握基本的MFC ActiveX开发方法。 前言 ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精华,如可链接对象、统一数据传输、OLE文档、属性页、永久存储以及OLE自动化等。 ActiveX控件作为基本的界面单元,必须拥有自己的属性和方法以适合不同特点的程序和向包容器程序提供功能服务,其属性和方法均由自动化服务的IDispat... 阅读全文
posted @ 2012-11-27 20:54 DoubleLi 阅读(818) 评论(0) 推荐(0) 编辑

摘要:程序在windowsXP和Windows7 32系统下运行的好好的,今天装了一个windows7 64位系统(说明,程序本身还是32位开发的),运行时出现“0xC015000F 正在被停用的激活上下文不是最近激活的”这个错误,找了好长时间才解决,下面总结如下: 网上提到较多的方法是在调用CWinApp::InitInstance();接口后面使用afxAmbientActCtx = FALSE;我采用这个方法后确实不会出现这个问题,不过我的程序中有一些代码由于把这个变量设成false后导致不执行,所以会出现其他问题,所以放弃该方法。我采用的方式是将Debug时所有MFC异常都抛出,不让MFC. 阅读全文
posted @ 2012-11-27 17:51 DoubleLi 阅读(8388) 评论(0) 推荐(0) 编辑

摘要:1.打开VC6.0,新建工程,选择:MFC ActiveX ControlWizard,后面步骤默认即可;2.在ClassView上,可以看到主要有**App\**Ctrl\**ProgPage几个类,其中接口主要在**Ctrl内实现,可以通过MFC ClassWizard(ctrl+w快捷键)的Automation页建立接口函数;3.接口函数是对外,因此在参数类型定义上要注意,字符我一般用LPCTSTR,如下面函数: void COnOcxCtrl::CallOcx(LPCTSTR devip) {// TODO: Add your dispatch handler code hereAfx 阅读全文
posted @ 2012-11-27 17:03 DoubleLi 阅读(2944) 评论(0) 推荐(0) 编辑

摘要:我64位win7安装java_ee_sdk-6u4-jdk7-windows-x64-ml.exe,提示Could not find the required version of the Java(TM)2 Runtime Environment in '(null)'网上搜了下解决方法参照:http://zhidao.baidu.com/question/404702217.html"我也遇到了和你相同的遭遇,心急火燎啊,甚至寝食难安。琢磨来琢磨去,怎么都不行。查了许多相关问题的资料,都没有做出正确的解答,几乎同出一辙的字面解释说我们安装的JRE错误或者没有安装J 阅读全文
posted @ 2012-11-25 22:54 DoubleLi 阅读(1101) 评论(0) 推荐(0) 编辑

摘要:摘要: 本文主要对VC++ 6.0的MFC编程方法及MFC应用程序框架进行简要介绍。 关键词: VC++6.0;MFC;程序框架 1 MFC概述 顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序在程序结构组织上是完全不同于以前的Win32 SDK编程方式的。自20世纪90年代初问世以来,MFC一直试图把Windows API函数封装到类库中个各个逻辑类中。MFC的这种封装并非简单地对API函数进行分组与打包,而是更多地通过类来试图实现全部的系统策略。随着越来越多系统功能的加入,MFC的规模也在不断拓展,目前已包括有200多个类,涵盖了通用Windo... 阅读全文
posted @ 2012-11-23 20:43 DoubleLi 阅读(1075) 评论(0) 推荐(0) 编辑

摘要:对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便。其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用到什么程度,毕竟现在的工具都是非常的强大,对于一般的编程任务来说还没有不能够胜任的工具,否则的话恐怕他就不可能在这个世界上存在哪怕是只有一个月的生命。 但是根据个人所好以及周围的人的影响,我们都会去使用某一种或者几种工具。比较Visual Basic 、C++ Builder和Delphi等编程工具,用VC++编写Windows应用程序可以说是最富于挑战性和艰巨性。在本文中我无意去比较各种工具的好 阅读全文
posted @ 2012-11-23 20:41 DoubleLi 阅读(4630) 评论(0) 推荐(2) 编辑

摘要:我们在调用WINDOWS函数的时候,经常要在后面加一条GetLastError()来取得函数出错的错误码以及原因,如果在调试的状态中,WINAPI出错了,那我们又要停下来,加一句GetLastError(),然后再跑。这样调试起来很不方便。其实我们可以使用VC里的一些固定符号来进行调试。下面说一下第一个@ERR,我们等函数执行完,并确定它出错了,那我们就可以在VC 的 WATCH窗口里加上@ERR,那我们就马上可以看到出错的错误码了。如果我们还想知道错误码的意思,那我们可以加上@ERR,hr,这样错误码和出错信息都清清楚楚的显示出来了。这个调试方法是不是很棒?其实这种伪符号还有一个用处,在我们 阅读全文
posted @ 2012-11-23 20:37 DoubleLi 阅读(500) 评论(0) 推荐(1) 编辑

摘要:随着计算机网络化的深入,计算机网络编程在程序设计的过程中变得日益重要。许多文章都曾经介绍过用VC++进行Socket编程的方法。但由于都是直接利用动态连接库wsock32.dll进行操作,实现比较繁琐。其实,VC++的MFC类库中提供了CAsyncSocket这样一个套接字类,用它来实现Socket编程,是非常方便的。 客户端 创建一个Dialog Based项目:CSockClient。设计一对话框,增加ID_Connect(连接)、ID_Send(发送)、ID_Exit(关闭)按钮,增加ListBox控件IDC_LISTMSG和Edit控件IDC_EDITMSG,并按下表在Class... 阅读全文
posted @ 2012-11-23 20:34 DoubleLi 阅读(563) 评论(0) 推荐(0) 编辑

摘要:Windows编程中一个比较原始的问题就是消息循环,现在很少有人关心这些了; 我个人对消息循环比较感兴趣,对底层的很多细节想深入了解! 以下说明几个消息循环中的常用函数进行对比 1 PostMessage 与 SendMessage 函数对比 SendMessage把消息直接发送到窗口,并调用此窗口的相应消息处理函数,等消息处理函数结束后SendMessage才返回!SendMessage发送的消息不进入系统的消息队列;SendMessage函数有返回值 PostMessage将消息发送到与创建窗口的线程相关联的消息队列后立即返回;PostMessage函数没有返回值; 2 Ge... 阅读全文
posted @ 2012-11-23 20:32 DoubleLi 阅读(551) 评论(0) 推荐(0) 编辑

摘要:消息映射、循环机制是Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。通常的做法是采取以下步骤: 第一步:定义消息。 推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。#define WM_MY_MESSAGE (WM_USER+100) 第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。 ... 阅读全文
posted @ 2012-11-23 20:18 DoubleLi 阅读(304) 评论(0) 推荐(0) 编辑

摘要:如果要编写模块化的软件,就要对对动态链接库(DLL)有一定的了解,本人这段时间在修改以前的软件时,决定把重复用的类和对话框做到DLL中,下面就从一个简单的例子讲起,如何实现MFC扩展DLL中导出类和对话框。 一、创建MFC扩展DLL 步骤: 运行Visual Studio 6.0->File->New...->Projects; 选择Mfc AppWizard(dll),在右边Project name下输入ExportClass,单击“下一步”; 选择Mfc Extension DLL (using share MFC DLL) 单击“finish”; 以上完成建立扩展D.. 阅读全文
posted @ 2012-11-23 19:49 DoubleLi 阅读(313) 评论(0) 推荐(0) 编辑

摘要:数据库建模,我们一般都是有PowerDesigner,可它毕竟是盗版的,呵呵,用着心里不大踏实。今天在网上找了一下,发了一个叫Open System Architect的免费软件。功能就不用说了,和PD差不多。下面我们看看它的截图。逻辑模型物理模型SQL编辑器这个SQL编辑器,好像比PD的要好用一些。下载地址:http://www.codebydesign.com/SystemArchitect/downloads/OpenSystemArchitect-4.0.0-XP-32bit.zip 阅读全文
posted @ 2012-11-23 18:38 DoubleLi 阅读(10901) 评论(2) 推荐(1) 编辑

摘要:CString->TCHAR*的转化可以用函数GetBuff()函数原型为:LPTSTR GetBuffer( int nMinBufLength );CString str("CString");TCHAR* szMsg = new TCHAR[100];//其参数为CString字符串的长度szMsg = str.GetBuffer(str.GetLength());str.ReleaseBuffer();delete []szMsg;szMsg = NULL;TCHAR*->CString的转化TCHAR szTchar[18] = L"TCHA 阅读全文
posted @ 2012-11-23 18:37 DoubleLi 阅读(1059) 评论(0) 推荐(0) 编辑

摘要:简介 摘要:关于VC中的数据类型转换BSTR、char*和CString的深入研究。 步骤/方法 char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如: char chArray[] = "This is a test"; char * p = "This is a test"; 或 LPSTR p = "This is a test"; 或在已定义Unicode应的用程序中 TCHAR * p = _T("This is a test" 阅读全文
posted @ 2012-11-23 18:36 DoubleLi 阅读(550) 评论(0) 推荐(0) 编辑

摘要:最近在学习MFC的过程中,看到一个窗口动画特效例子,不过它是在一个对话框里面嵌入效果,我想如果能把它的代码提取出来再写成一个窗口动画类就好了。于是便着手写了这个类,你可以去CSND下载(http://download.csdn.net/source/2196359)这个代码运行看看。闲话少说,先看看这个类的声明:/******************************************//************CDlgFlash.h*******************//************ Author:Arlin *****************//********* 阅读全文
posted @ 2012-11-22 20:55 DoubleLi 阅读(5511) 评论(0) 推荐(0) 编辑

摘要:1、新建一个MFC AppWizard项目,选择选基于文档或者对话框都可以。2、添加两个图片,如下,第二张图片把第一张图片的中间部分镂空,也即删除该部分区域,让背景透明 3、添加位图资源,导入上面的那两张图片。 4、新建一个基类为CWnd的类TransparentWnd,代码如下:头文件:[cpp:collapse] + expand sourceview plaincopyprint?//TransparentWnd.H #if!defined(AFX_TRANSPARENTWND_H__INCLUDED_) #defineAFX_TRANSPARENTWND_H__INCLUDED_ #. 阅读全文
posted @ 2012-11-22 20:54 DoubleLi 阅读(413) 评论(0) 推荐(0) 编辑

摘要:新建一个MFC Wizard项目,基于对话框。我们来看看下面这段代码:[cpp] view plaincopyprint?SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)^0x80000);//加载dll HINSTANCEhInst=LoadLibrary("User32.dll");if(hInst){typedefBOOL(WINAPI*Fun)(HWND,COLORREF,BYTE,DWORD);Funfun=NULL;//找到dll中的SetLayere 阅读全文
posted @ 2012-11-22 20:52 DoubleLi 阅读(1241) 评论(0) 推荐(0) 编辑

摘要:添加鼠标左键按下响应函数:1、声明afx_msg void OnLButtonDown(UINT nFlags, CPoint point);2、消息映射BEGIN_MESSAGE_MAP(CDddDlg, CDialog) //{{AFX_MSG_MAP(CDddDlg) ON_WM_LBUTTONDOWN() //}}AFX_MSG_MAPEND_MESSAGE_MAP()3、实现函数void CDddDlg::OnLButtonDown(UINT nFlags, CPoint point) {// TODO: Add your message handler code here and/ 阅读全文
posted @ 2012-11-22 20:51 DoubleLi 阅读(251) 评论(0) 推荐(0) 编辑

摘要:气泡提示和气球提示是不一样的,如果要实现气球提示(经常在系统栏弹出的提示)需要去微软网站下载新的SDK才能支持。我们来看看气泡提示是怎么样的。1、写一个类继承CToolTipCtrl。2、在类中添加下列方法BOOL AddTool(UINT nID,LPCTSTR Text){ TOOLINFO ti; memset(&ti,0,sizeof(TOOLINFO)); ti.cbSize=sizeof(TOOLINFO); ti.hwnd=this->GetOwner()->GetSafeHwnd(); ti.uFlags=TTF_IDISHWND|TTF_SUBCLASS; 阅读全文
posted @ 2012-11-22 20:50 DoubleLi 阅读(532) 评论(0) 推荐(0) 编辑

摘要:一、DLL简介它是Dynamic Link Library 的缩写形式,DLL 是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含 阅读全文
posted @ 2012-11-22 20:47 DoubleLi 阅读(2178) 评论(0) 推荐(0) 编辑

摘要:VC6.0 支持三种dll,如下Non-MFC Dlls(非MFC dll);指的是不用MFC的类库结构,直接用C语言写的DLL,其输出函数一般是标准的C接口,能被非MFC和MFC编写的应用程序调用。可以用“Win32 应用程序向导”创建非 MFC DLL 项目。Regular Dlls(MFC正规DLL),使用“MFC DLL 向导”创建,又分为静态链接和动态链接两种。Extension Dlls(MFC扩展DLL),使用“MFC DLL 向导”创建,始终动态链接MFC。下面来自MSDN--确定要使用的dll的类型如果 DLL 要使用 MFC,且将由 MFC 或非 MFC 应用程序使用,则必 阅读全文
posted @ 2012-11-22 20:30 DoubleLi 阅读(229) 评论(0) 推荐(0) 编辑

摘要:文章作者:宋宝华信息来源:天极网原始连接: http://soft.yesky.com/lesson/318/2166818.shtml?412 动态链接库(DLL)是Windows系统的核心,也是COM技术的基础,因此突破动态链接库一直是技术人员的攻坚目标,本期专题将由浅入深的介绍动态链接库的基础慨念、分类、实现和应用。基础慨念1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代... 阅读全文
posted @ 2012-11-22 20:27 DoubleLi 阅读(7303) 评论(0) 推荐(0) 编辑

摘要:在c中使用molloc,free动态分配释放内存,而在c++中可以使用new delete运算符。比如在c中定义数组我们可以有两大种方式:1,静态分配内存:如: int a[10];2,使用new动态定义:如: int *p = new int[10];那么这两种方法有什么区别呢??其实,使用new,delete等叫做“动态分配内存”,我们一般定义的int a[10]数组存在函数的整个生命期,也就是说,在一个函数中定义了a[10]数组,那么从定义时起直到这个函数执行完成a[10]数组都会存在,他是静态的,不能由程序员自动的分配释放。而所谓的“动态分配内存”之所以是动态的就是因为我们可以在函数中 阅读全文
posted @ 2012-11-22 20:23 DoubleLi 阅读(2503) 评论(0) 推荐(0) 编辑

摘要:这几天准备论文,涉及到LIb和Dll文件,同学问了一句这两个文件有什么区别,我一时还真说不很清楚,在这里整理一下,以供以后参考。 静态链接库LIB和动态链接库DLL的区别:1. 如果采用静态链接库,lib中的指令都包含在最终生成的exe文件中。如果采用动态的链接库,该dll不必包含在exe文件中。Exe文件执行时,可以动态的加载和卸载这个与exe无关的dll文件。2. 静态链接库不能再包含其他的动态链接库或者静态链接库;而动态链接库不受限制,仍然可以包含其他的动态链接库和静态链接库。VC的动态链接库有三种类型,分别是非MFCdll,MFCdll和MFC扩展dll1. 非MFCdll不采用mfc 阅读全文
posted @ 2012-11-22 20:22 DoubleLi 阅读(466) 评论(0) 推荐(0) 编辑

摘要:在一些项目中,考虑到系统的安全性和稳定性,经常要封装一些DLL或者LIB库供别人使用,那么怎么制作DLL或者LIB文件呢?今天特酷吧根据自己的实际情况给大家讲解下基本的制作方法。以下是我亲自操作的记录:1,动态库dll的编写方法:新建一个动态链接库:填好工程名称即可选择工程类型,如果没有特别的要求,选择一个空工程即可。会看到这里和标准的控制台工程一样,没有任何系统默认建立的文件下面就需要我们添加一些文件。建立动态库dll文件 , 我们不需要写main函数。只需要一个一个的实现我们需要实现的接口函数即可.这里需要用到extern "C" __declspec(dllexpor 阅读全文
posted @ 2012-11-22 20:20 DoubleLi 阅读(5459) 评论(0) 推荐(0) 编辑

摘要:引言:在编写MFC程序的时候,通常需要编写dll库以供其他程序调用。关于MFC dll的相关知识很多很杂,这里特酷吧结合自己学习中遇到的问题专门整理了一些MFC dll的基础知识。本部分共上下两篇文章,本文为上篇,MFC DLL应用程序类型分为以下三种:(1)使用共享MFC DLL的规则DLL(2)带静态链接MFC的规则DLL(3)MFC扩展DLL下面重点解释一下这些DLL的含义区别:一,规则DLL首先谈谈所谓的"规则DLL":"规则DLL"是由"Regular DLL"翻译而来的。它实际上体现出来两方面的本质:(1)该DLL是基于M 阅读全文
posted @ 2012-11-22 20:18 DoubleLi 阅读(4063) 评论(0) 推荐(0) 编辑

摘要:a、Non-MFCDLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。b、RegularDLL:和下述的ExtensionDlls一样,是用MFC类库编写的。明显的特点是在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上的。静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。该类DLL应用程序里头的输出函数可以被任意Win32程序使用,包括使用MFC的应用程序。输入函数有如下形式:extern"C"EXPORTYourExportedFunct 阅读全文
posted @ 2012-11-22 20:11 DoubleLi 阅读(2035) 评论(0) 推荐(0) 编辑

摘要:在DLL弹出一个对话框,开始弹出对话框时出现“Debug Assertion Failed”, 上网搜了下,发现模块句柄的设置问题。然后作出如下解决: 1. 定义两个全局变量: HINSTANCE g_hModuleInstance = NULL; HINSTANCE g_hOldModuleInstance = NULL; 2.在DllMain函数中对g_hModuleInstance进行赋值: g_hModuleInstance = hInstance; 3.在要使用对话框资源的类新建两个函数设置模块句柄。 void CAlternatExtractFun::SetResourceHand 阅读全文
posted @ 2012-11-22 19:54 DoubleLi 阅读(3401) 评论(0) 推荐(0) 编辑

摘要:1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候。1.2使用友元函数的优缺点1.2.1优点:能够提高效率,表达简单、清晰。1.2.2缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用 阅读全文
posted @ 2012-11-22 13:55 DoubleLi 阅读(467) 评论(0) 推荐(0) 编辑

摘要:1. 模板的概念。我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float max( float x,float y){return (x>y)? x:y ;}//函数3.double max(double x,double y){return (c>y)? x:y ;}但如果在主 阅读全文
posted @ 2012-11-22 11:38 DoubleLi 阅读(265) 评论(0) 推荐(0) 编辑

摘要:转自:http://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html,致谢!!!assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#include <std 阅读全文
posted @ 2012-11-21 21:02 DoubleLi 阅读(952) 评论(0) 推荐(0) 编辑

摘要:以下内容转自http://blog.csdn.net/hairetz/article/details/4141043一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 阅读全文
posted @ 2012-11-21 21:00 DoubleLi 阅读(646) 评论(0) 推荐(0) 编辑

摘要:Summary:总结Win32提供的创建多线程相关的API接口和基本的使用框架。Ref:MSDN: http://msdn.microsoft.com/zh-cn/library/y6h8hye8(v=VS.100)Win32多线程的创建方法主要有:(1)CreateThread()(2)_beginthread()&&_beginthreadex()(3)AfxBeginThread()(4)CWinThread类(1)CreateThread()百度百科:http://baike.baidu.com/view/1191444.htm函数原型:view plaincopy t 阅读全文
posted @ 2012-11-21 20:59 DoubleLi 阅读(11388) 评论(0) 推荐(0) 编辑

摘要:这三个参数都是告诉编译器参数的传递约定,参数的传递约定是指参数的传递顺序(从左到右还是从右到左)和由谁来恢复堆栈指针(调用者或者是被调用者),在 Win16下有两种约定: C 和 PASCAL。 C约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。 PASCAL约定和C约定正好相反,它规定参数是从左向右传递,由被调用者恢复堆栈。 STDCALL是C约定和PASCAL约定的混合体,它规定参数的传递是从右到左, 恢复堆栈的工作交由被调用者完成。Win32只用STDCALL约定, 但除了一个特例, 即: wsprintf。 __stdcall 这是一种函数调用方式。 _. 阅读全文
posted @ 2012-11-21 20:57 DoubleLi 阅读(2313) 评论(1) 推荐(0) 编辑

摘要:调试策略第一章 调试的过程1. 成功而高效的调试的关键是找到准确的错误信息2. 一旦找到一个错误,就可能找到更多。类似的代码可能还有类似的错误3. 从错误中学习如何预防将来会产生的错误4. 对于新代码,根本不需要执行测试来判断它是否有错误第二章 编写便于调试的C++代码C++语言和编程风格1. 在需要的时候使用语言的高级特性2. 要写出能被“人”理解的代码,不仅是编译器3. 慎用匈牙利命名法4. 每一个语句行都应该作为一个单独的原子单位,这样可以充分利用调试工具5. 如果你不能确定是否需要括号,那么就需要括号6. 使用C++自身特性防止错误的方法:用const代替#define来创建常量;用e 阅读全文
posted @ 2012-11-21 20:55 DoubleLi 阅读(1853) 评论(0) 推荐(0) 编辑

摘要:VS2005设置可以在Release模式下调试 一、首先:从“配置管理器”中将项目配置成Release版:在下拉列表中选择了Release后,点击“关闭”即可。 见图-1 。二、按Alt+F7:进入当前项目的属性设置:经过上面的设置,应该是“活动(Release)”,然后按下面的三个图示分别设置: 见图-2, 图-3, 图-4,OK! 可以在Release版中进行调试了。 阅读全文
posted @ 2012-11-21 20:53 DoubleLi 阅读(3744) 评论(0) 推荐(0) 编辑

摘要:如何在对话框中实现文件拖放功能在对话框上添加一个Picture Control,然后把Accept Files属性修改成True。如果是想托图片的话需要把Type改成Bitmap。在头文件里加入:afx_msg void OnDropFiles(HDROP hDropInfo);在cpp文件里加入:ON_WM_DROPFILES()在OnInitDialog()的最后加入:DragAcceptFiles(TRUE);在cpp文件里添加:void CTestDragDlg::OnDropFiles(HDROP hDropInfo){ int nFileCount = DragQueryFil.. 阅读全文
posted @ 2012-11-21 20:52 DoubleLi 阅读(1409) 评论(0) 推荐(0) 编辑

摘要:所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。一、预编译头文件说明所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectn 阅读全文
posted @ 2012-11-21 20:49 DoubleLi 阅读(3221) 评论(1) 推荐(3) 编辑

摘要:从microsoft网站上找到关于#include Directive (C/C++)的相关问题解释如下:The#includedirective tells the preprocessor to treat the contents of a specified file as if those contents had appeared in the source program at the point where the directive appears.Syntax FormActionQuoted formThe preprocessor searches for includ 阅读全文
posted @ 2012-11-21 20:47 DoubleLi 阅读(403) 评论(0) 推荐(0) 编辑

摘要:1.MessageBox("这是一个最简单的消息框!");2.MessageBox("这是一个有标题的消息框!","标题");3.MessageBox("这是一个确定 取消的消息框!","标题", MB_OKCANCEL );4.MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMATION );5.MessageBox("这是一个两种属性的消息框!","标题", MB_ICONE 阅读全文
posted @ 2012-11-19 19:23 DoubleLi 阅读(4050) 评论(0) 推荐(1) 编辑

摘要:[转]#ifndef#define#endif的用法(整理) 原作者:icwk 文件中的#ifndef 头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。 还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的: #ifndef <标识> #define <标识> ...... ...... #endif <标识>在理论上来说可以是自由命名的,但每 阅读全文
posted @ 2012-11-16 10:06 DoubleLi 阅读(12873) 评论(0) 推荐(2) 编辑

摘要:C++ 调用.lib的方法:一: 隐式的加载时链接,有三种方法 1 LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。 2 设置工程的 Project Settings来加载DLL的LIB文件 打开工程的 Project Settings菜单,选中Link,然后在Object/li 阅读全文
posted @ 2012-11-06 15:34 DoubleLi 阅读(34720) 评论(0) 推荐(1) 编辑

摘要:如何: 通过HTML文档对象模型访问文档中的ActiveX控件的属性此文章的信息应用于:Microsoft Internet Explorer (编程) 版本4.0, 4.01, 4.01 SP1, 4.01 SP2, 5, 5.01, 5.5,6.0概要CSDN文档中心文章 用 MSHTML 的一点经验 111222(原作) 说明了如何访问在HTML文档对象模型中的网页的元素、内容。但是,有时候开发者实际上需要访问的是网页中ActiveX控件的属性、方法和事件。例如,你在网页载入之后需要修改/获取MediaPlayer的媒体源,以及控制MediaPlayer的播放。更多信息为获得Active 阅读全文
posted @ 2012-11-05 16:53 DoubleLi 阅读(864) 评论(0) 推荐(0) 编辑

摘要:最近参与了一个项目,我的同事在开发一个ActiveX对象,我帮他编写JS脚本来调用这个对象,其中碰到蛮多问题,最难的就是如何响应由ActiveX对象返回的对象事件。正好,现在一起总结一下。 首先,我来介绍一下COM组件,以便说明js如何响应 COM组件 方法:voidinit()//初始化对象 Project createProject()//创建一个Project类型的对象并返回 事件: onInit( int_code )//当init成功后触发 Project类的结构: 方法:voidinit()//初始化Project对象 事件: onInit( int_code )//当init成功 阅读全文
posted @ 2012-11-05 16:50 DoubleLi 阅读(3801) 评论(1) 推荐(0) 编辑

摘要:1:创建ActiveX对象在web中使用ActiveX组件有两种方法,一是如下rep_print_medcan.CABOBJECT标签中,通过ID指点了对象的ID号,javascript可以使用该ID号来引用该对象,而classid用于标识这个组件,每个ActiveX组件都有唯一一个用于表示他的ID号。而codebase指定的程序下载到本地(在系统目录的“DownloadedProgramFiles”子目录下),然后调用组件程序的自注册入口函数注册到当前系统中,以后的创建都在本地进行,不再涉及codebase属性使用以上的方法来创建ActiveX对象,有些参数设置需要手抖的填写,麻烦,2、另外 阅读全文
posted @ 2012-11-05 16:49 DoubleLi 阅读(24188) 评论(0) 推荐(0) 编辑

摘要:MFC Activex与JavaScript的接口交互在Activex的应用中与网页的JavaScript的交互必不可少,在这里就简单的介绍下。VC 创建的Activex的有两种类型,MFC Activex与ATL Activex, 在VC新建工程的时候选择,这篇文章介绍的是针对MFC Activex的,ATL Activex可以绕过了。测试环境:: VC++ 6.0 SP6(一) MFC Activex与JavaScript的传递参数、返回值在JavaScript调用时Activex方法,可以归分为两种:1参数为整型变量,返回为整型变量long CActivexCtrl::Func(long 阅读全文
posted @ 2012-11-02 17:43 DoubleLi 阅读(4974) 评论(1) 推荐(2) 编辑

摘要:1.向ActiveX注册JS函数:在ActiveX中添加接口方法 - void RegisterFunction(BSTR bstrFuncName, IDispatch* dispFunc);JavaScript代码声明一个函数,并调用RegisterFunction接口向ActiveX注册该函数,供ActiveX调用。2.保存注册的函数,ActiveX使用CComDispatchDriver对象保存注册的JS函数(IDispatch接口指针)CComDispatchDriverm_Func1;void RegisterFunction(BSTR bstrFuncName, IDispatc 阅读全文
posted @ 2012-11-02 17:37 DoubleLi 阅读(4635) 评论(0) 推荐(0) 编辑

摘要:4.实现从ActiveX调用网页中的javascript.设计思路:从上述项目中产生的calc.html中创建一个js函数来调用控件的CallWebJs方法,而CallWebJs方法又调用页面中的js方法printMsg();具体操作如下:同3中的做法,再为控件添加一个方法命名为CallWebJs,在calc.cpp中找到该方法,并实现如下:STDMETHODIMP Ccalc::CallWebJs(VARIANT scriptCallback){// TODO: Add your implementation code hereCComPtr<IDispatch> spCallb 阅读全文
posted @ 2012-11-02 17:02 DoubleLi 阅读(7152) 评论(0) 推荐(1) 编辑

摘要:1. 打开VS2008,单击起始页中的“New Project…”,选择“ATL”分类下的“ATL Project”项目,项目名称为“ATLtest”。在随后出现的项目向导中,使用默认配置即可。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />2. 添加控件在解决方案管理器中的项目上右击,依次选择“A 阅读全文
posted @ 2012-11-02 17:01 DoubleLi 阅读(2653) 评论(0) 推荐(0) 编辑

摘要:本文描述了使用ATL开发一个ActiveX控件的完整过程。一、创建项目单击起始页中的“New Project…”,选择“ATL”分类下的“ATL Project”项目,项目名称为“Calculator”。在随后出现的项目向导中,使用默认配置即可。 二、添加控件在解决方案管理器中的项目上右击,依次选择“Add”、“Class”,在添加类对话框中选择ATL分类下的ATL Control类型。单击“Add”按钮,将会出现添加ATL Control向导。 在向导的第二步中,将接口类型选择为“Dual”,为控件支持事件做为准备,在Support选项中,选中“Connection points”复选框。. 阅读全文
posted @ 2012-11-02 16:59 DoubleLi 阅读(898) 评论(0) 推荐(0) 编辑

摘要:之前写过文章通过自定义函数来实现ActiveX回调JS中的函数,最近在网上发现一更简洁的方法,通过事件触发,在这里小结一下,为使内容连贯,请参考我之前的《一步一步实现ATL开发的ActiveX组件与javascript的交互》系列文章http://hi.baidu.com/hwygy_001/blog/item/21ec5bc5294f64bd8326ac72.html:1.如果使用的是VS2010,则在Class View窗口中右击_ICalcEvents接口,依次选择“Add”、“Add Method…”,根据添加方法向导添加AddCompleted方法,如下图所示:若采用的VS2008, 阅读全文
posted @ 2012-11-02 16:56 DoubleLi 阅读(687) 评论(0) 推荐(0) 编辑

摘要:1.在COM组件中调用JavaScript函数// 连接点方式页面javascript脚本<object classid="CLSID:B568F111-DFE4-4944-B67F-0728AB2AB30F" id="testCom" VIEWASTEXT></object><script language="JavaScript" for="testCom" event="staTe(s)"> alert("State(" + s + 阅读全文
posted @ 2012-11-01 19:42 DoubleLi 阅读(2570) 评论(0) 推荐(0) 编辑

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