
VC++
leehong2005
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Win32子类化与超类化
大家都知道,MS提供了很多丰富的控件(也叫窗体),但有些控件在实际的应用中可能还是不能满足要求,比如说,我想让BUTTON点击时变成另一种外观,我们怎么做呢?要改变外观就只能重新进行绘制,肯定就需要在HWND的WM_PAINT消息里面处理,问题是我们怎么才能得到这个HWND的消息呢?每一个窗体都是通过CreateWindow来创建的,在创建之前,都会注册一个类,这个类就相当于是模板,当然有些是系统原创 2013-02-24 21:23:47 · 2681 阅读 · 0 评论 -
Win32 窗体风格说明
体风格是各种窗口开发的重要基础之一。它可以分为普通风格(WS_系列)和扩展风格(WS_EX_系列)。从其特点上来说,主要分两大类:1、一类表明窗口和其他窗口的关系,如:WS_CHILD、WS_POPUP、WS_OVERLAPPED、WS_CLIPCHILDREN、WS_CLIPSIBLINGS、WS_GROUP、WS_EX_TOPMOST、WS_EX_MDICHILD等,这里的关系并不是指原创 2013-02-25 14:35:23 · 2277 阅读 · 0 评论 -
Win32 创建控件风格不是Win XP解决方案
有时候我有在用Win32 API来向窗体上添加控件时,通过CreateWindow或CreateWindowEx创建出来的控件的风格不像XP风格,而是像Windows 2000的风格,界面很难看。注意,是动态调用CreateWindow来创建控件,不是从资源中加载。这种情况下,我们怎么办呢,通常说来,造成这种情况都是由于没有正确加载资源,我们知道,像button, combob原创 2013-02-26 11:57:50 · 2564 阅读 · 0 评论 -
如何提升应用程序启动权限
有些应用程序在启动时就需要管理员权限,比如Spy++,regedit等,如果在Windows Vista或Windows 7操作系统上面,用户把UAC打开的话,这些应用程序运行时就会弹出一个UAC对话框,请求获得管理员权限。这些程序都有一个特别,就是程序的图标上面有一个小盾牌,说明运行时是需要管理员权限,如下图:关于提升权限,有两种方式:自动与手动。1.手动提升权限手动提升原创 2013-02-26 12:04:35 · 4732 阅读 · 0 评论 -
Win32遍历指定路径下的文件(Shell实现)
其实有很多种方法实现遍历指定路径下的文件,最普通的可能就是用FindFirstFile、FindNextFile等API来实现,这种实现方法也可以,但是,如果文件夹时里面有子文件夹的话,用这个方法实现起来就有点麻烦,可能要用递归,而递归这种方式效率是个很大的问题,在这不打算讲这种方法,下面要说的是另一种方式------Windows Shell。 其实用Shell来实现,思路很简原创 2013-02-26 12:21:19 · 2517 阅读 · 0 评论 -
C#基本图像处理
最近没事,有网上看到一篇关于图像处理的文章,觉得很好,结合它上面的原理,自己写了一个C#图像处理的例子。这个DEMO的界面的有两个PictrueBox控件,用来显示图片,一个是源图片,一个是经过转换的目标图片,UI下面部分有一些按钮,每个按钮实现一个转换功能。这个DEMO允许用户拖一张图片到源PictureBox中,然后通过这些功能按钮实现图片的效果转换。这些功能有把图片变成黑白、底片、浮雕、锐化原创 2013-02-26 12:33:58 · 18643 阅读 · 2 评论 -
Windows键盘消息处理
文大部分来自MSDN和网友的博客,我在实践的基础上再作了一些总结。1. 虚拟键(VK_*)键盘上每一个键对应一个扫描码,扫描码是OEM厂商制定的,不同的厂商生产的键盘同样一个按键的扫描码都有可能出现不一致的情况,为了摆脱由于系统设备不一致的情况,通过键盘驱动程序将扫描码映射为统一的虚拟键码表示,从而达到所有的设备都有一个统一的虚拟键,比如回车键的虚拟键是VK_RETURN。原创 2013-02-26 11:52:37 · 15857 阅读 · 0 评论 -
打开文件夹,并同时选中指定文件
如何用程序打开一个文件,并选中这个文件夹中指定的文件呢?其实这个功能用得很多。1.方法一ShellExecute( NULL, _T("open"), _T("Explorer.exe"), _T("/select, D:\\a.mp3"), NULL, SW_SHOWDEFAULT);打开D盘,并选中a.mp3这个文件。2原创 2013-02-26 12:19:06 · 6731 阅读 · 1 评论 -
关于AlphaBlend函数使用时遇到的问题
AlphaBlend函数在使用时,要注意以下几点:1,源图片的宽高只能小于等于实际图片(选入到hMemDC的HBITMAP)的宽高,不然的话就绘制不出来。比如说,实际的HBITMAP的大小是 256 * 256 的,那么你的宽高不能超过 256,不然就绘制不出来。2,源的left和top与源的width和height相加的值也应当要小于等于源图片的宽高。也就是说,如果源top是原创 2013-02-26 12:22:18 · 1672 阅读 · 0 评论 -
x86程序读取64位系统注册表失败解决方案
在做一个项目时,遇到了这么一种情况,在64位操作系统下(WOW),运行一个x86的应用程序,这个程序会读取注册表项目,读取注册表的代码是一样的,只要不交叉访问就是正确的(32位程序运行在x86平台,64位程序运行在x64平台),最后进行了一番调试,才搞明白失败的原因。 导致原因是这样的,32位与64位两个操作系统版本上的注册表的结构是不一样的,有些键是可以共享的,而有些键是不可以共享原创 2013-02-26 12:25:28 · 7834 阅读 · 0 评论 -
Win32 使HBITMAP显示成透明效果2
我之前写了一篇文章,关于如果将HBITMA(如Excel文件的图标)显示在界面上。Win32 使HBITMAP显示成透明效果由于有的HBITMAP有透明色,如果直接把这个HBITMAP画在界面上,透明的地方就会显示成黑色(也不一定是黑色)。当时我用的方法是把这个HBITMAP通过转换成GDI+的Image里面,然后把这个Image画在界面上,这样就可以去掉黑色。最近又发现了一个新的方法原创 2013-02-25 14:27:25 · 4452 阅读 · 0 评论 -
钩子原理与应用
1. 基本概念钩子(Hook)是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监听指定窗口的某种消息,而且所监听的窗口可以是由其他他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,原创 2013-02-24 22:08:38 · 7216 阅读 · 0 评论 -
Win32 替换系统任务栏弹出菜单
替换系统弹出菜单在XP系统下面,右击任务栏上的一个应用程序,就会弹出一个菜单,可以通过这个菜单操作应该应用程序,如关闭、还原、最大化、最小化等。如下图所示:在Windows 7里,这个弹出菜单是不是直接在任务栏上点击右键,而是先把鼠标移动到应用程序图标上面,这时系统会弹出一个应用程序预览图,然后在这个预览图上面点击右键,就会弹出如上图所示的系统菜单。如下图所示。原创 2013-02-24 21:52:56 · 3057 阅读 · 0 评论 -
PreviewHandler用法(一)
Windows 7操作系统有一个新功能,那就是文件预览,即不打开文件,就能看到其内容。效果如下图所示。 只有提供了预览接口的文件才能被预览,如WORD, EXCEL, 视频,音频,图片,HTML等。要看哪些文件可以预览,可以从注册表中查看,如下图所示。路径是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curre原创 2013-02-24 21:34:31 · 9387 阅读 · 0 评论 -
PreviewHandler用法(三)
四.C#如何与COM进行交互 由于IPreviewHandler是COM接口,要想在C#中用,那么就要把它导入到C#中来,用[ComImport]标记可以将COM接口导入到C#中。ComImport的含义是指示该属性化类型是以前在COM 中定义的。在接口导入后,要对接口里的函数进行定义,不然C#中的程序就用不了。代码如下:[ComImport][InterfaceTyp原创 2013-02-24 21:45:40 · 2767 阅读 · 1 评论 -
Win32工程引用gdiplus.h编译错误解决方案
很多时候我们在VC++中要用到GDI+来画一些东西,要用GDI+的东西,头文件,命名空间,类库这些东西是少不了的。新建一个Win32工程,在头文件里面加入:#include using namespace gdiplus;#pragma comment(lib, "gdiplus.lib")如果直接这样用的话,编译就可能会出现错误,有上百个错误,而且错误显示原创 2013-02-24 21:49:10 · 4722 阅读 · 3 评论 -
Win32 使HBITMAP显示成透明效果
如何使HBITMAP显示成透明效果将得到的HBITMAP显示到界面上,方法很多,最常用的就是用GDI+的Graphics对象,把它画到界面上:Graphics gg(hdc);Bitmap *p = Bitmap::FromHBITMAP(g_hBitmap, NULL);gg.DrawImage(p, 0, 132, p->GetWidth(), p->GetHeight原创 2013-02-24 22:00:13 · 10880 阅读 · 2 评论 -
解决Windows 程序界面闪烁问题的一些经验
一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一: 如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。原创 2013-02-24 22:04:57 · 6185 阅读 · 0 评论 -
绘制窗体时防止闪烁
原文在这里:如何在绘画窗口时防止闪烁http://www.catch22.net/tuts/flicker.asp===================================================================================================================================原创 2013-02-24 22:05:41 · 1748 阅读 · 0 评论 -
操作配置文件的一种设计思路
我在写一个DeskBand Sample时,界面上出现的元素都是来自于配置信息,配置信息要从配置文件中来。目前是从注册表中来,但是,我们不能把它写死了。 还是那句话,封装是要封装变化,变化的东西是什么,是配置文件类型,XML,注册表,INI,数据库等等。数据格式,一般情况下变化不会太多。所以我们应该一个尽可能灵活的接口出来,即使某一天要从注册表换成XML,我们也能很从容应对。原创 2013-02-24 22:10:29 · 1180 阅读 · 0 评论 -
Side by side解决方案
有时候,我们用Visual C++开发的程序,发布到一台没有开发环境的电脑上,有可能出现错误,应用程序根本就运行不起来,如下图所示:它提示side by side配置不正确,这种情况一般都是找不到C运行库(CRT)而引起的。一、什么是side by side在Windows XP SP2以后,Windows引入了side by side执行的概念,这个概念本来是.NET原创 2013-02-24 21:22:01 · 13323 阅读 · 0 评论 -
PreviewHandler用法(二)
三. 如何得到Preview Handler的GUID首先说明一下,IPreviewHandler接口的GUID是8895b1c6-b41f-4c1c-a562-0d564250836f,要找支持的Preview Handler的GUID就要用到它。如何去找呢,在注册表中有四个地方,我这个程序里是四个,不知道还没有别的方式。第一种方式以.docx后缀为例,注册表路径是:原创 2013-02-24 21:39:51 · 5064 阅读 · 0 评论 -
Windows获取所有视频文件的扩展名
有时候,我们想得到当前电脑上面视频类型文件的扩展名,(事实上,不光是视频类型的,还有音乐类型,文档类型的文件的扩展名),我们要怎么实现呢?其实这些信息都是存放在注册表中,包括每种类型的文件的属性选项都是存放在注册表中。下面讲一下如何得到视频类型的文件扩展名(同理也可以得到其实类型的)。 注册表路径: HKEY_LOCAL_MACHINE\\Software\\Micro原创 2013-02-26 12:16:21 · 3360 阅读 · 0 评论