摘要: 在MFC或者WTL工程里,如果使用了RichEdit控件,会发现程序无法启动,编译器却没给出任何警告或错误。在网上找了下资料,原来是没有加载支持RichEdit的动态库。在MFC下面添加:AfxInitRichEdit();在WTL下面添加:HMODULE hRichDll = LoadLibrary(_T("riched20.dll"));程序结束时:if(hRichDll){ FreeLibrary(hRichDll); hRichDll= NULL;}-------------------------------------------我是分割线----------- 阅读全文
posted @ 2014-01-02 20:18 ssp1024 阅读(1098) 评论(0) 推荐(0) 编辑
摘要: WTL提供了一个很棒的对话框扩充类CDialogResize,可以使对话框控件随对话框大小改变而改变(包括大小和位置,只能选一个)。该类定义在:atlframe.h一个很棒的教程:Using WTL's Built-in Dialog Resizing Class还有一个可以在MFC中实现同样效果:Using WTL's Built-in Dialog Resizing Class for MFC步骤如下:1.继承列表加入CDialogResize,如:2.添加控件到表格中,跟MFC中的消息映射表是同样的道理:3.初始化相关数据,可以在InitDialog中进行:4.把这个类加 阅读全文
posted @ 2013-12-26 19:41 ssp1024 阅读(921) 评论(0) 推荐(0) 编辑
摘要: MFC中的视图文档结构有CHtmlView,可以展示网页,其原理是IWebBrowser的封装,我们当然可以自己封装一个html控件,不多利用现有类来派生更加简单。 由于CHtmlView是视图文档结构中的一部分,需要CHtmlView视图从中剥离出来。只用重载下面三个函数。 1 BEGIN_MESSAGE_MAP(CHTMLCtrl, CHtmlView) 2 //{{AFX_MSG_MAP(CHTMLCtrl) 3 ON_WM_DESTROY() 4 ON_WM_MOUSEACTIVATE() 5 //}}AFX_MSG_MAP... 阅读全文
posted @ 2013-12-04 20:18 ssp1024 阅读(810) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2013-11-30 16:22 ssp1024 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 现在需要实现窗口屏幕边缘吸附的效果,现在只考虑屏幕右边缘。思路如下:当窗口右侧与屏幕右侧距离小于某个值(假设是20px)的时候,改变窗口的水平位置,使窗口右边框紧贴屏幕右侧。这个动作时通过WM_MOVING消息实现的,当窗口移动时,窗口会收到这个消息,我们可以在这个消息中通过参数修改窗口位置。这样实现的话问题就出现了,拖动窗口到右侧可以看到吸附效果,可是向左拽不动窗口了。将屏幕最右侧20px像素矩形区域作为一个特殊区域(就叫做吸附区吧),只要窗口右侧落到这个区域内,就移动窗口至屏幕右边缘。如果想要拖动窗口离开边缘,需要下面两个状态值:窗口是否已经停靠在右侧鼠标是否是向左拖动窗口很明显,如果上面 阅读全文
posted @ 2013-11-07 19:46 ssp1024 阅读(1420) 评论(0) 推荐(0) 编辑
摘要: 附上上篇文章----C++调用JS:http://www.cnblogs.com/aishangxue/p/3397781.htmlJS可以调用C++编写的函数,需要以下步骤:1)定义一个组件类,需要实现IDispatch接口。2)在GetExternal 函数中返回上面定义组件。3)在定义的组件类中实现GetIDsOfNames,GetIDsOfNames( __RPC__in REFIID riid, __RPC__in_ecount_full(cNames ) LPOLESTR *rgszNames, UINT cNames, LCID lcid, __RPC__out_ecount_f 阅读全文
posted @ 2013-11-06 18:25 ssp1024 阅读(1307) 评论(0) 推荐(0) 编辑
摘要: 需要删除一个为注册为com组件的dll,反注册过程神马的都已经写好了。现在需要在删除之前确定组件是否是好的。ProgId,dll名称以及ClsId都是知道的。首先,在网上查找相关资料,有两种方式:1)通过查找注册表,因为所有的com组件都注册在HKEY_CLASS_ROOT下面,通过查看注册该组件的键值是否存在来判断。2)通过CoCreateInstance函数来创建这个com组件的对象,创建成功说明正常。在此选择第二种方式。因为第一种仅仅判断了该com组件注册过而且注册信息还保留着,文件是否仍然存在、键值是否损坏没有考虑。判断的过程很顺利,不过删除出现了问题,发现dll文件可以正常删除,可以 阅读全文
posted @ 2013-11-04 20:36 ssp1024 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 在WebBrowser中C++可以和JS互相通信,下面说一下怎样实现C++调用JS。所有的网页全局函数均是window的一个方法,所以首先获取到页面的window对象。将所调用的JS方法名转换为ID,IDispatch对象的GetIDsOfNames方法。通过函数ID调用JS函数,IDispatch对象的Invoke方法。一下是DuiLib中的WebBrowser具体实现:1)继承CWebBrowserUI创建一个新类。这里说下这个函数 1 IDispatch* DuiLib::CWebBrowserUI::GetHtmlWindow() 2 { 3 IDispatch* pDp = ... 阅读全文
posted @ 2013-10-30 21:24 ssp1024 阅读(2898) 评论(0) 推荐(0) 编辑
摘要: 问题:程序中有如下逻辑:向网络请求数据,然后获取响应的部分HTML代码,此时获取到的数据为宽字节字符(wchar_t)。需要对获取到的部分HTML代码进行分析,但是处理逻辑只接受多字节字符(char),这个就需要进行编码转换,使用ATL提供的转换函数(其实是个模板类)CW2A。并且使用默认的code page :CP_THREAD_ACP。分析过程会从HTML中解析出一些属性值,当然这些属性值是以多字节字符返回的。程序其他地方需要使用这些属性值,我们又得把多字节字符转换成宽字节字符,使用CA2W。在中文操作系统下面一切正常,可是到了英文系统下就会出现HTML中的中文属性值乱码。解决方法:在使用 阅读全文
posted @ 2013-10-30 13:05 ssp1024 阅读(961) 评论(0) 推荐(0) 编辑
摘要: 前面说过有时候链接出错是因为运行时库没有选择一致: http://www.cnblogs.com/aishangxue/p/3376563.html 今天又碰到了这个设置的问题,在WIN7 64 + VS2010 生成的执行程序放到一个纯净系统下面出现这个错误 原来是运行库设置成了动态库的原因,设置成多线程(MT)即可: 阅读全文
posted @ 2013-10-29 19:50 ssp1024 阅读(527) 评论(0) 推荐(0) 编辑