- 博客(13)
- 收藏
- 关注
原创 Windows SDK笔记(二):在窗口上建立控件
一、概述 控件是子窗口,它们是系统已经定义好的窗口类,因此不需要注册、也不需要写消息处理函数。在主窗口得到WM_CREATE消息时,建立子窗口即可。 二、实例 //参数:窗口句柄,消息,消息参数,消息参数LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ //处理感兴趣的消
2004-12-17 09:26:00
978
转载 [转贴]关于用VC对图像进行裁剪
由于用户的要求,需要采集图像,可以采集到的图像有很大一部分黑色的边框,用户需要把它裁掉,这可难到了我,找了很多资料,也没有现在的东西可用(哈哈,中国的程序员就是这样!),包括CSDN网站搜过,codeproject上search过,也Google了办天,没有找到很合适的函数或是库, 在网上下了几个例子,关于图像显示、旋转、缩放的,看了看,还是没明白所以(主要是还是对图像的结构没有弄清
2004-12-14 11:15:00
1007
转载 [转贴]Skin技术实现框架(五)
接上篇,控件类的接口有了:CWidgetHookBase,产生控件对象的工厂也有了,下面就该实现控件类了。在上篇定义控件基类的时候,我们只定义了一个抽象函数Install,而没有任何其他代码,那么,所有的实现代码都交给各个控件类去实现吗?不是的,这些控件类还有许多公共代码可以在基类实现,但是,我们选择不在CWidgetHookBase中加入这些代码,而是再加入一个中间类:CWidgetHook。为
2004-12-14 10:27:00
1097
转载 [转贴]Skin技术实现框架(完)
有过去一个周末了,昨天去看跳水比赛,现场的气氛还是不错的。可惜田亮没有来,否则,光看看观众席的fans也是一种享受啊。废话结束,进入正题,今天讲点以前没说清楚的内容。上次提到了消息反射,但没有深入,这个概念是这样的,许多窗口控件会向父窗口发送一些消息,比如WM_COMMAND消息和WM_NOTIFY消息,通知父窗口一些事件。因为是发给父窗口的,所以控件窗口的过程函数不能捕捉到这些消息。但是,经常我
2004-12-14 10:27:00
1173
转载 [转贴]Skin技术实现框架(四)
今天有点空了,继续写。上次我们已经得出了基本的设计,由此确定了每种窗口必须有一个类来与之对应,这里所说的窗口种类是按照窗口的windows class名称来区分的,class名称相同的就认为是一种窗口。这种分类方法和我们看到的窗口种类可能有一些差异,例如,普通按钮,单选按钮和复选框的类名都是“Button”,对于这种情况,我们仍然用一个类来对应这些窗口,而在类内部区分对待这些不同的窗口。这样,我
2004-12-14 10:26:00
1060
转载 [转贴]Skin技术实现框架(三)
上次说了hook和窗口类的原理,有了hook,我们可以截取所有消息,有了窗口类,我们可以识别窗口类型,不同类型的窗口给予不同处理。这样,我们要在钩子函数里面识别不同的窗口和不同的消息,有大量的分派工作,更要命的是,光区分窗口类还不够,同类型的不同窗口经常需要不同的处理,例如两个button窗口,大小不同,文字不同,是否有鼠标按下不同...... 这些状态有些是可以从button窗口读到的,例如大小
2004-12-14 10:20:00
1304
转载 [转贴]Skin技术实现框架(二)
原理上次基本上是些介绍,也就是废话,今天讲讲实现Skin的基本原理吧。要实现自己独特的界面,方法有很多啦,上次也说过,这里只讲一种,就是通过消息钩子改变已有控件的外观。这种方法的好处是可以不必修改程序已经完成的标准界面,只要把钩子函数挂上,所有的界面就都变了,使用起来非常方便。这里的基本原理就是下面这个调用:SetWindowsHookEx(WH_CALLWNDPROC, HookProc,
2004-12-14 10:19:00
1411
1
转载 [转贴]Skin技术实现框架(一)
本来想把代码和E文的文章提交到codeproject再写,不知道为什么,这两天codeproject提交向导一直有问题,也罢,先开始写原理吧,反正恐怕也要写几天的前言嘿嘿,估计今天写不了多少,就叫前言吧,下次再写原理说到skin技术,大家都不会陌生,最早接触这东西,可能是winamp吧,可以灵活的更换界面风格,非常的花哨。后来使用skin的软件就越来越多了,毕竟做一个漂亮的界面对软件还是很
2004-12-14 10:15:00
1575
1
转载 [转贴]SkinX, an infrastructure of skin package
IntroductionIm not sure what kind of technology they used in those commercial skin components, but this artical will give you one implementation of such skin framework. The code is part of an inc
2004-12-14 09:54:00
918
原创 消除屏幕闪烁
由于作图过于复杂和频繁,所以时常出现闪烁的情况,一些防止闪烁的方法,如下:(1)将Invalidate()替换为InvalidateRect()。Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。不要为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,事实上
2004-12-09 13:39:00
1627
原创 解决Windows 程序界面闪烁问题的一些经验 (转载)
一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般
2004-12-06 09:46:00
722
原创 美化CListCtrl中显示的焦点行
经常使用ClistCtrl来显示大量的数据,但是总感觉焦点行的背景颜色为蓝色,显示的效果挺难看的,参考《MFC技术内幕》这本书中的例子,自己修改了ClistCtrl的OnPaint代码,把焦点行改为白色的背景,加了一个矩形的边框,下面实际的效果,自我感觉还不错; 实现思路:1、 首先调用Default,让ClistCtrl自己画2、 调用GetDC()函数获得DC
2004-12-02 10:05:00
1427
1
原创 在CScrollView中使用双缓存画图的拖动问题
原因: 在CScrollView中需要画图功能,而且画图的大小超过屏幕的实际大小,为了解决屏幕闪烁的问题,采用了双缓存画图的方法(在内存首先画出图象,然后粘贴到屏幕上),然而,当拖动滚动条的时候,产生了屏幕重叠的问题,下面是具体的解决方法;思路: 首先在OnDraw函数中画图,下面是简单步骤;1、 使用CreateCompatibleDC函数,生成一个内存DC2、
2004-12-01 10:46:00
2138
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人