windows
文章平均质量分 83
逝流水
这个作者很懒,什么都没留下…
展开
-
windows 截取消息
先概述一下消息:在API中:在消息队列中GetMessage,然后调用TranslateMessage,再然后分发消息DispatchMessage在MFC中:由于它把很多过程都封装了,所以我们都看不到了。但是它为我们留下了借口供我们调用,例如:PreTranslateMessage,我们在系统处理消息前,截取这个消息;在编程的过程中,我们可能经常去琢磨windows的内部实现,它是如原创 2013-01-07 19:27:57 · 990 阅读 · 0 评论 -
mfc程序透明
使程序透明:1、设置程序的风格GWL_EXSTYLE,这个函数使程序彻底透明SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^WS_EX_LAYERED); 2、设置窗口的透明状态SetLayeredWindowAttributes(th原创 2013-02-25 10:26:19 · 545 阅读 · 0 评论 -
DirectDraw GDI的区别之一
屏幕上的显示在内存中是以下这样的结构。当向显示缓存区中写入数据时,就会显示相应的图像。DirectDraw的作用是创建,其实就是取得缓存区的地址,并且还能创建一个虚拟的缓存区内存。例如,A区域内存可以在主内存中创建一块叫offscreen的缓存区。如果显示卡的内存比较大,如图3.6所示,有一块区域是映像到屏幕上的可见区域,还有的显存区域是屏幕上看不见的,这个区域被称为offscreen。也就是转载 2013-03-12 09:37:57 · 10701 阅读 · 0 评论 -
Api Hook, Hook Api that you want to Hook
如果你想截取某个Api的执行,那么你可以选用微软提供的一个库:Detours;如果要下载请链接:http://research.microsoft.com/en-us/projects/detours/网上提供了很多源码,都是关于怎么使用这个库的,但是今天我把它下载下来,不管三七二十一,看着网上提供的范例,照着写了一个。一运行出现:stack flow(很明显是递归调用);哎呀,极度郁闷,于是原创 2013-02-28 00:37:33 · 399 阅读 · 0 评论 -
运行时库冲突
为什么会链接的时候会导致库冲突例如:LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突请使用 /NODEFAULTLIB:library主要原因就是你链接程序的时候,你同时链接了多个运行库,所以出现这个提示。对于很多windows提供的库,都包含两个版本:静态链接版本,动态链接版本。链接模式:Debug模式,Release模式。由于宏定义的原创 2013-03-14 00:02:22 · 1253 阅读 · 0 评论 -
关于windows多字节和宽字节函数的总结:
在刚开始的时候,我变成用的是vc6.0,这个时候,我从来不会考虑编码的问题,因为vc6.0默认的编码就是ansic,不用来回地设置编码类型。不过到后来IDE换成vs2010的时候,vs2010默认的编码是宽字节,为了让自己的程序无论在多字节还是在宽字节环境都能正常编译,所以开始喜欢上了T这个东西,无论是字符变量的定义,还是函数的运用我都喜欢带T(t)通用型的。不过这种方式并不是放之四海而皆准的。部原创 2013-03-21 12:43:25 · 1451 阅读 · 0 评论 -
Detours使用注意
1、保存系统函数的那个全局函数指针切记不可重复赋值。因为在事务提交之后,这个函数指针指向的区域是一个跳转到我们截取的那个函数的地址,如果给这个变量重新赋值之后,就无法跳转到原来的函数了,并且陷入一个递归调用。 例如:FUNTYPE pFun=LoadLibrary;(当调用事务提交之后,不可再变)解决方案:if(pFun==NULL){pFun=LoadLibrary;}2、如原创 2013-03-21 11:31:34 · 1007 阅读 · 0 评论 -
更改MFC对话框默认的窗口类名
这一段时间做进程注入,需要其他进程向当前进程发送消息,所以需要当前程序的窗口句柄。所以想到:FindWindow函数。以前使用这个函数就是直接把第一个参数设置为Null,通过第二个参数来获取窗口。这种方法对于有标题栏的窗口有用,但是如果一个窗口的风格是无标题栏,这个方法就不行了,只用使用第一个参数。于是查询到如果一篇文章。感谢作者。Windows操作系统中有一个概念——窗口类。转载 2013-05-03 22:46:18 · 817 阅读 · 0 评论 -
修改窗口风格
一般来说修改窗口的风格有两种方法,第一种是在窗口创建之前,修改创建窗口所引用的结构体。另外一种是通过API。1、修改CREATESTRUCT结构体AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名、窗口是叠加型的、可改变窗口大小等。要修改窗口的缺省风格,需要重载 CWnd::PreCreateWindow(CREATESTRUCT& cs)函数原创 2013-06-24 13:39:40 · 1566 阅读 · 0 评论 -
Window窗口绘制
窗口绘制过程:WM_NCPAINT:绘制父窗口的非客户区域。调用:OnNcPaintWM_ERASEBKGND擦出背景:调用OnEraseBkgnd->OnCtlColorWM_NCPAINT:绘制控件非客户区的消息,调用OnCtlColor->CtlColor->OnEraseBkgnd(父窗口)->OnCtlColorWM_ERASEBKGND(控件)调用OnC原创 2013-01-26 14:54:45 · 1723 阅读 · 1 评论 -
VC的编码:WCHAR的控制台显示问题
字符集与编码方案概念:字符集与编码方案概念分明,却互依互存。字符集与编码方案是配套的。比如提到 GB2312 编码,即是指 GB2312 字符集与 GB2312 编码方案。此处 GB2312 为两字节定长编码。而提到 Unicode 编码,即指 Unicode 字符集与 UTF-X 编码方案。其中 UTF-16 为两字节定长编码,UTF-8 设计为变长是为了工业应用中兼容已有的 ANSI/AS原创 2013-03-07 14:56:17 · 1464 阅读 · 0 评论 -
Detours能截取哪些函数?
//@modify:由于自己理解能力的有限,所以我下面的理解是片面的,不全面的,所以在此更正。 这两天一直在用Detours(想要详细了解,请google搜索一下)这个api hook库,然后遇到不少的问题。Detours这个库的基本原理是:修改目标函数的首几个字节,跳转到我们的钩子函数,我们可以根据需要决定是否通过跳板执行原来的函数。 我遇到:有些函数能钩到,原创 2013-03-02 18:58:14 · 1072 阅读 · 1 评论 -
WideCharToMultiByte与MultiByteToWideChar
搞编程的程序员怎么可能不遇到关于编码的问题呢?在网页经常用到 :gb2312,UTF-8等等,在数据库上也会用到,还有还有很多多......无奈,今天又遇到了一个编码的问题,就是在MFC中的WideCharToMultiByte与MultiByteToWideChar这两个编码转换函数,看了一上午的东西,终于在看了荷包蛋:http://www.cnblogs.com/gakusei/artic原创 2013-03-05 11:55:30 · 863 阅读 · 0 评论 -
用与程序关联的程序打开文件方式总结
用与程序关联的程序打开文件方式总结方法一:调用命令行_tsystem("start *")缺点需要弹出一个cmd窗口,所以很难看,不过功能是文件是打开了方法二:WinExec("",SW_HIDE);缺点:不支持unicode编码,不过可以编码转化方法三:ShellExecute(NULL,_T("open"),path,NULL,NULL,SW_SHOWNORMAL);原创 2013-01-09 09:32:36 · 579 阅读 · 0 评论 -
CMenu CImage ClistCtrl 小结
这些东西以前都用过,可以说都是浅尝辄止。随便接触了一下,不过真正做项目的时候,就会遇到各种各样的问题。好吧,一个一个开始说第一个:CMenu菜单使我们经常使用的控件,我们可以把它想象成一棵树,它有子节点;我们可以把某个叶子借点设置为(Popup:false)那么这个菜单变为不可有子节点,并且可以添加消息。可以通过GetSubMenu获取子菜单。菜单类型:弹出式 和 非弹出式创建类型原创 2013-01-08 16:16:16 · 639 阅读 · 0 评论 -
GDI操作PNG图片
这两天在做UI,以前做过一点,但是不太熟悉,于是乎就遇到很多的问题。以前用BITMAP的时候,做的就是像素COPY,再多一点就是像素运算,这一切的东西都是有自己控制的。也就是说不参杂alpha通道。话说今天我用PNG图片,但是用到一个小图片的时候,图片总是不能正常显示。代码如下:CImage image;//CImage类有自己的Dcif (image.Load(imagePath转载 2013-01-16 17:32:56 · 6987 阅读 · 0 评论 -
fstream打开文件模式
fstream:对于文件的操作很久两年前就开始使用了,但是仅仅为了达到满足自己需求的目的,就是要么是写,要么是读。从来没有对其进行详细的了解。自己也曾经想过花一点时间去总结一下,这个东西到底应该怎么用。但是由于:自己的本性懒,所以一直拖到今天,挤出一点时间把这个问题彻底解决一下。还有一点,读写不要同时用否则会出问题。相用的话,需要先seekg或者 seekp;ios::in 为输入原创 2013-01-31 18:51:37 · 3691 阅读 · 0 评论 -
MFC闪屏解决方案
这两天一直在做UI设计,由于公司没有用到商业的Direct UI等界面库。所以码农们必须自己绘制自己的控件,于是乎这个编写UI的任务就落在我这个新码农身上了。然后以前一直逃避的问题有不期而遇。思密达。问题一、自己绘制的背景把界面上原有的控件遮挡住了,为了解决这个问题,可把我等吊丝累坏了。方案一、绘制完背景,然后再获取所有控件的区域,使其无效。于是问题解决了,可是新问题又来了,就是闪屏问题。原创 2013-01-17 18:06:49 · 2719 阅读 · 0 评论 -
无边框窗口拖动
这几天做UI,遇到了很多以前遇到,但是自己却没有解决的问题,在此把这些重新遇到的问题解决一下。也是我认识到在软件编程的一个道理:欠下的总要换的。这次所遇到的问题是:无边框的窗口移动。首先我要说说自己尝试过的方案,然后再说比较好的方案。我首先想到的方案就是:鼠标按下,记录一下坐标,鼠标移动的时候,把窗口移动到新的位置。这种方案能解决问题,但是鼠标移动太快的时候,窗口跟不上鼠标的动作。然后原创 2013-01-18 10:18:55 · 6761 阅读 · 0 评论 -
双缓冲使用注意事项
在遇到绘图闪屏的时候,我们可能第一反应就是利用双缓冲,这个的确是正确的。可是我们部分人会忽略某些细节造成效率降低的问题。注意一、如果需要频繁的向客户区Copy像素,那么我们的内存Dc应该是一个和窗口生命周期相同的变量。因为,我们每次创建Dc需要消耗时间,并且在加载位图的耗费的时间也非常多。我就犯了这个错误,每次绘图重新创建一个Dc,然后加载位图,调试的时候发现消耗时间太多了,于是得出这条结论。原创 2013-01-20 22:41:51 · 564 阅读 · 0 评论 -
自定义形状界面MFC
作为一个人,我们都是具有审美观点的,爱美之心人皆有之,如何是自己做出的程序更美,更漂亮,是每个程序员的心愿,每天看到的都是方方块块的矩形窗口,是不是很腻,很呆板。今天偶然想到怎么自定义界面形状的问题。然后就开搜索相关的知识,本来以为很难的东西,不过看过之后也没有那么难了。 我们可以想想每个程序都关连一个区域,这个区域决定将来程序的显示区域,超出区域之外的东西都不属于这个程序了。由原创 2013-01-20 01:15:54 · 1552 阅读 · 0 评论 -
vs2010调试dll,以及与vc6.0的一点小区别
vs2010 dll调试方式在vs6.0,当执行dll时候,它会让你选择一个调试dll的应用程序,这个很方便;当我今天用vs2010调试dll的时候,想象中要弹出一个对话框让我选择一个应用程序。但是想象是美好的,现实是残酷的,它弹出了一个无法执行应用程序,非常郁闷。我用vs2010开发项目,没有多长时间,所以很多东西都不是太懂,只是感觉里面需要配置的东西实在太多了。于是开始在网原创 2013-02-19 17:21:56 · 3695 阅读 · 0 评论 -
windows 多线程编程的几点经验
1、不要在子线程操作UI控件2、如果你操作了,也绝对不能调用UpdateData来更新界面,否则程序Crash3、这一条建立在第一条基础上---你在子线程操作UI控件,不可以让主线程等待某些条件(如等待子线程关闭,而子线程正在操作UI、等待进入临界区,而子线程已经进入,并且操作UI),否则会出现假死...4、最好方案:子线程操作数据,完成之后,通知主线程进行更新....转载 2013-08-02 13:44:21 · 932 阅读 · 0 评论