
技术笔记
文章平均质量分 59
debehe
小人物
展开
-
ListCtrl Checkbox多选问题
需求与目标:标准的Listctrl是支持多选的,但这个多选只是把那些选中行变成高亮而已,我想要的效果是像svn提交代码的那个listctrl那样:1.可以用鼠标框选,可以按ctrl或shift进行组合选择.这是listctrl本身支持的,只要设置对了风格就没问题,这个不是重点,跳过 :) 2.在选择了多行之后,点击鼠标或按下空格,能够把所有选中行都选上(呵呵,这就是我想要的)??没用过这个原创 2008-04-11 23:52:00 · 2571 阅读 · 2 评论 -
解决windows7透明背景变花
因为开了透明效果,使用的过程中透明的背景变花了(开始菜单,窗口边缘,任务栏预览等……),显示的是之前的桌面,很难看。 解决:杀死进程:dwm.exe :) 杀死dwm.exe后,系统会自动重启这个进程。但是在window7中有时没有重启成功,这时的解决方案就是:到服务中找到:Desktop Window Manager Session Manager停止服务,启原创 2009-02-02 13:09:00 · 1405 阅读 · 3 评论 -
gdi+非独占打开图片
gdi+打开图片,用Bitmap有很多构造函数,之前我一直使用 Bitmap( const WCHAR *filename, BOOL useIcm); 但是,这个构造方法有个缺陷:图片竟然是以独占形式打开的!这样我就不能对他进行读写了。 我的解决方案是采用另一个构造函数:Bitmap( IStream原创 2009-07-13 10:47:00 · 1903 阅读 · 2 评论 -
浅析wtl消息循环机制
0、wtl只是对windows的消息处理进行了模板封装,我们可以再atlapp.h中找到CMessageLoop的代码。2、非模态对话框,想要你的对话框能收到消息,你需要在PreTranslateMessage中调用IsDialogMessage,否则你将连ESC都响应不了。3、想要处理PreTranslateMessage,你需要调用 // register object for m原创 2009-07-30 10:44:00 · 2337 阅读 · 0 评论 -
获取桌面图标字体和系统右键菜单字体
需求:1、显示的文字字体和桌面图标一样2、显示的文字字体和系统右键菜单的一样说白了就是要取到系统字体设置中的对应字体:实现:找来找去,结果答案一直在眼皮底下。 // 取系统桌面图标字体 CFont m_fontIcon; LOGFONT logFont; ZeroMemory ((PVOID) &logFont,sizeof (L原创 2009-08-26 12:58:00 · 2512 阅读 · 1 评论 -
解决VS2008中MFC静态编译出来的文件太大问题
使用vs2008+MFC进行开发,发现静态编译出来的文件超级大,超出了可以忍受的范围。于是做了如下实验: vs2008下:test 1、新建一个默认的MFC对话框工程,采用共享MFC的方式,生成文件:82KBtest 2、新建一个默认的MFC对话框工程,采用静态链接MFC的方式,生成文件1.66MB vs2005下:test 1、新建一个默认的MFC对话框工程,采用原创 2009-06-25 14:14:00 · 4199 阅读 · 1 评论 -
GDI+效率问题与优化
这周在用GDI+实现图片的动画效果,起初每画一帧都在30-40ms左右,动画效果自然不能令人满意。困惑了良久,后面在高人的指点下,效率有了显著地提高,最主要是清楚了时间都花在了那里,优化起来也就方便很多。 我现在知道的影响GDI+效率的主要有:1、DrawImage,比起BitBlt实在差的不是一点点,解决的方法就是用BitBlt替换DrawImage。2、PixelFor原创 2009-07-05 00:08:00 · 7963 阅读 · 8 评论 -
自绘用于调整大小的“粒状”(grippie)
VS2008在非最大化时的状态栏上会有一个用于调整大小的“粒状”(grippie),我们自己的自绘窗口经常也需要这么一个东西,本文说的就是这个东西的实现。 图1:vs2008的grippie图2:vs2008的grippie放大后的样子图3:我的实现效果 实现其实很简单,截个图,放大,原来就是画些点,具体还是贴代码吧:)gdi和gdi+的代码其实没有本质的区原创 2009-09-07 23:20:00 · 651 阅读 · 1 评论 -
用VC实现汉字转拼音首字母
参考代码:http://blog.youkuaiyun.com/lixiaosan/archive/2006/05/26/756350.aspxlixiaosan的代码用的是CString在Unicode下有问题,我这里稍作修改,用stl::string和stl::wstring替换CString代码为两个文件:GenFirstPYLetter.h,GenFirstPYLetter.cpp/* -原创 2009-09-28 21:38:00 · 3049 阅读 · 1 评论 -
显示桌面的困惑,不响应“显示桌面”(ToggleDesktop)
需求:在桌面放一个WS_EX_LAYERED风格的窗口,置底(一直在其他窗口下面),不响应Win+D,始终保持在桌面。分析:1、Win+D或者快速启动栏上的“显示桌面”,其实最终调用的是个Shell方法(IShellDispatch4.ToggleDesktop()),而且你的窗口不会收到任何与此相关的消息。2、调用IShellDispatch4.ToggleDesktop()时,系统会给De原创 2009-10-14 16:22:00 · 6911 阅读 · 5 评论 -
编程实现修改系统用户图片(无解)
有这么个需求:要求编程实现对系统用户图片的修改,也就是XP、vista、win7系统登录时欢迎界面上显示的图片。找来找去,问来问去,问题最终还是没有统一的解决方案,无解而终,但总算有些收获,罗列如下:1.xp下有注册表项专门保存这个路径:[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Hints/Adminis原创 2009-12-14 15:41:00 · 966 阅读 · 1 评论 -
在WTL中通过IDL实现IDispatch
一直用WTL开发界面,但从来没有过在WTL中添加IDL并实现IDispatch,刚好遇到了这个问题,困惑了一个下午,终于想明白了。我的需求是:1.一个exe,实现一个对话框,其中嵌入一个WebBrowser,用于访问网页;2.在网页中调用WebBrowser中的接口方法,比如说在网页中点击了“关闭”按钮,外框就需要能响应到,并最终关闭对话框。实现起来也很简单,关键点是实现一个IDispat原创 2009-12-21 17:21:00 · 1690 阅读 · 4 评论 -
如何使用DISPPARAMS和SAFEARRAY
1> DISPPARAMS配合BSTR使用,在调用的函数结束后释放内存2> DISPPARAMS配合BSTR使用,在调用的函数中释放释放内存3> DISPPARAMS配合SAFEARRAY的使用,利用CComSafeArray来管理内存1> DISPPARAMS配合BSTR使用,在调用的函数结束后释放内存LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WO原创 2008-10-30 20:02:00 · 7168 阅读 · 1 评论 -
vista下安装vs2005
我的系统:Windows Vista Ultimate SP1我的安装过程:1.首先关闭UAC,重启系统(不关会出现1395错误)2.安装VS2005 Team,直接双击autorun.exe就可以了,不需要以兼容模式运行,否则会出现"xp sp2..."3.安装vs2005 sp14.安装vs2005 sp1 for vista5.打开UAC,重启系统,the end原创 2008-06-10 23:55:00 · 1494 阅读 · 4 评论 -
写给软件开发的人
我是自己直接重载的CHtmlView来实现IE控件,在使用的过程中发现老是会弹出脚本错误窗口,很是烦人,所以找了一下,发现下面这个:WebBrowser脚本错误的完美解决方案原来可以把IE控件设成Silent,一查msdn,哦~~CHtmlView::SetSilent 搞定。简单的事情和简单的解决方法转载 2008-04-12 00:14:00 · 201 阅读 · 0 评论 -
判断当前是否有窗口全屏
批注:这种方法不太方便,因为你必须实现一个appbar,可能是个假的,但还是不方便。add by debehe 2008.1.22我之前用过的方法有两种:1.得到当前激活窗口,比较他与desktop的大小2.以屏幕4个角的4个点为坐标分别得到4个窗口,判断这4个窗口是否同一个 这两个方法“都可以”,应该我他能判断得出有游戏正在全屏状态,但是这毕竟不是“官方做法”,今天我的朋友g原创 2008-04-11 23:58:00 · 2593 阅读 · 0 评论 -
对话框不能响应键盘消息
这东西真是奇怪,找了半天原因,最终的发现却是让人抓狂,呵呵现象:对话框按ESC或回车都不能关闭窗口(我没有处理PreTransplanteMessage),用spy++看,对话框完全收不到键盘消息原因:我的对话框上有个控件的属性中设置了:Tab Stop,rc文件中看的话就是加上了WS_TABSTOP解决:去掉tab stop风格! 唉,真是!#$%!$%!$%^@%^@#%&*!%$原创 2008-04-11 23:59:00 · 1962 阅读 · 3 评论 -
vc6中使用数字签名
vc 2005中使用数字签名十分方便,只要包含了WinTrust.h、SoftPub.h和Mscat.h,并添加导入库WinTrust.lib;就可以直接调api,但使用VC6的朋友们就麻烦了,需要参考MSDN上的函数及结构体声明,自已定义函数指针最后进行调用。因为项目用的是VC6,没办法,只好硬着头皮把函数指针扣出来,同时发现还有问题:1.数字签名需要新sdk的支持,不装新的sdk,就算函数原创 2008-04-11 23:44:00 · 2136 阅读 · 0 评论 -
无法访问windows安装服务
最近发现电脑上的msi安装文件都用不了了,于是:1、检查“服务”中windows install是不是被停止,结果发现,这个服务竟然没了2、没办法只能去System32下检查下msiexec.exe文件在不在,竟然...也没了,唉。这世道!去别人机子上拷了一个过来,发现有些msi文件可以用了,但是还是有些不行,这是为什么呢?3、呵呵,问题还是在服务身上,我们需要把Windows ins原创 2008-04-12 00:00:00 · 3000 阅读 · 2 评论 -
在Vista下注册服务
vista下的权限让我们无法像以前那样,直接运行下 xxx.exe /service就可以把这个程序注册成服务(当然前提是你这个程序处理了/service参数,并写了注册表)。其实有个取巧的方法:到system32目录下,右键点cmd.exe-->以管理员身份运行-->哈哈哈原创 2008-04-12 00:05:00 · 697 阅读 · 0 评论 -
接口指针使用时:Unhandled exception ... Stack overflow
现象:COM进程外组件有个方法CreateDog(IUnknown** ppUnk)),用于创建一个IDog接口,当要直接把spDog智能指针传给CreateDog方法,发现传递回来的接口是非空的,而且返回值也是S_OK,但是一量使用这个指针去调用他的方法(QI三函数没问题)就出弹出断言:Unhandled exception ... Stack overflow.在多方帮助之下,终于发现了问原创 2008-04-12 00:07:00 · 1832 阅读 · 0 评论 -
聚合接口过早释放导致“服务器出现意外情况”
要说明这个问题,首先我说下聚合接口的使用,借助ATL我们是这么用的:/**///////////////////////////////////////////////////////////////////////////// 例子class CExample//: ... ......{ BEGIN_COM_MAP(CExample) // ... ...原创 2008-04-12 00:13:00 · 1657 阅读 · 0 评论 -
深入解析连接点
Connection Point Internals Working with ATL 8示例代码 关键字: COM ATL 连接点 进程间通信 代理存根 双接口 自定义接口 0-我要讲什么 (1) 介绍连接点 (2) 实现一个简单的连接点 (3) 用双接口实现连接点来进行进程间通信 (4) 用自定义接口实现连接点来进行进程间通信 (5) 小原创 2008-04-14 19:54:00 · 8228 阅读 · 7 评论 -
windws下取MAC地址的三种方法
方法一:利用NetBIOS API来获取MAC缺陷:依赖于NetBIOS协议,这个协议现在的网卡有些已经不支持了,所以有些情况下会取不到(不推荐使用这种方法)HRESULT GetMAC(char* pszMAC, unsigned int uCount)......{ if (!pszMAC) return E_INVALIDARG; if (uCount S原创 2008-04-23 12:55:00 · 1656 阅读 · 1 评论 -
利用rundll32.exe来运行自定义的dll导出函数
因为安装脚本中需要调用到我们的一个dll中的导出函数,于是有了下文。重要参考:INFO:Windows Rundll 和 Rundll32 接口http://support.microsoft.com/kb/164787刚开始不知道原来rundll对调用的导出函数的原型进行了限制,导致"尝试运行 XXX 时发生意外"在dll中assert出来,并attatch到rundll32进程,发现参数不原创 2008-06-02 10:18:00 · 5176 阅读 · 0 评论 -
网页通过External接口与WebBrowser交互
在上一篇Blog中谈到在WTL中添加IDL用于通过向导实现IDispatch,是要付出代价的,而且代价还不小,所以最后我还是用了最简单有效的方法。这里就把这样一个例子代码帖子下面:下面是我的IDispatch的实现,其中的MainDlg就是WTL向导生成的非模态对话框,可以根据自己的需求去掉。/* ------------------------------------------原创 2009-12-22 09:59:00 · 3990 阅读 · 6 评论