- 博客(48)
- 收藏
- 关注
原创 怎样成为优秀的软件模型设计者?
我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则应用到你的软件工程中,你会获得立杆见影的成果。 1. 人远比技术重要 你开发软件是为了供别人使用,没有人使用的软件只是没有意义的数据的集合而已。许多在软件方面很有成就的行家在他们事业的初期却表现平平,因为他们那时侯将主要精力都集中在技术上。显然,构件(components),EJB(Enterpris
2005-01-24 13:27:00 762
原创 Windows SDK笔记(二):在窗口上建立控件
一、概述 控件是子窗口,它们是系统已经定义好的窗口类,因此不需要注册、也不需要写消息处理函数。在主窗口得到WM_CREATE消息时,建立子窗口即可。 二、实例 //参数:窗口句柄,消息,消息参数,消息参数LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ //处理感兴趣的消
2004-12-17 09:26:00 1040
转载 [转贴]关于用VC对图像进行裁剪
由于用户的要求,需要采集图像,可以采集到的图像有很大一部分黑色的边框,用户需要把它裁掉,这可难到了我,找了很多资料,也没有现在的东西可用(哈哈,中国的程序员就是这样!),包括CSDN网站搜过,codeproject上search过,也Google了办天,没有找到很合适的函数或是库, 在网上下了几个例子,关于图像显示、旋转、缩放的,看了看,还是没明白所以(主要是还是对图像的结构没有弄清
2004-12-14 11:15:00 1071
转载 [转贴]Skin技术实现框架(五)
接上篇,控件类的接口有了:CWidgetHookBase,产生控件对象的工厂也有了,下面就该实现控件类了。在上篇定义控件基类的时候,我们只定义了一个抽象函数Install,而没有任何其他代码,那么,所有的实现代码都交给各个控件类去实现吗?不是的,这些控件类还有许多公共代码可以在基类实现,但是,我们选择不在CWidgetHookBase中加入这些代码,而是再加入一个中间类:CWidgetHook。为
2004-12-14 10:27:00 1160
转载 [转贴]Skin技术实现框架(完)
有过去一个周末了,昨天去看跳水比赛,现场的气氛还是不错的。可惜田亮没有来,否则,光看看观众席的fans也是一种享受啊。废话结束,进入正题,今天讲点以前没说清楚的内容。上次提到了消息反射,但没有深入,这个概念是这样的,许多窗口控件会向父窗口发送一些消息,比如WM_COMMAND消息和WM_NOTIFY消息,通知父窗口一些事件。因为是发给父窗口的,所以控件窗口的过程函数不能捕捉到这些消息。但是,经常我
2004-12-14 10:27:00 1230
转载 [转贴]Skin技术实现框架(四)
今天有点空了,继续写。上次我们已经得出了基本的设计,由此确定了每种窗口必须有一个类来与之对应,这里所说的窗口种类是按照窗口的windows class名称来区分的,class名称相同的就认为是一种窗口。这种分类方法和我们看到的窗口种类可能有一些差异,例如,普通按钮,单选按钮和复选框的类名都是“Button”,对于这种情况,我们仍然用一个类来对应这些窗口,而在类内部区分对待这些不同的窗口。这样,我
2004-12-14 10:26:00 1106
转载 [转贴]Skin技术实现框架(三)
上次说了hook和窗口类的原理,有了hook,我们可以截取所有消息,有了窗口类,我们可以识别窗口类型,不同类型的窗口给予不同处理。这样,我们要在钩子函数里面识别不同的窗口和不同的消息,有大量的分派工作,更要命的是,光区分窗口类还不够,同类型的不同窗口经常需要不同的处理,例如两个button窗口,大小不同,文字不同,是否有鼠标按下不同...... 这些状态有些是可以从button窗口读到的,例如大小
2004-12-14 10:20:00 1344
转载 [转贴]Skin技术实现框架(二)
原理上次基本上是些介绍,也就是废话,今天讲讲实现Skin的基本原理吧。要实现自己独特的界面,方法有很多啦,上次也说过,这里只讲一种,就是通过消息钩子改变已有控件的外观。这种方法的好处是可以不必修改程序已经完成的标准界面,只要把钩子函数挂上,所有的界面就都变了,使用起来非常方便。这里的基本原理就是下面这个调用:SetWindowsHookEx(WH_CALLWNDPROC, HookProc,
2004-12-14 10:19:00 1453 1
转载 [转贴]Skin技术实现框架(一)
本来想把代码和E文的文章提交到codeproject再写,不知道为什么,这两天codeproject提交向导一直有问题,也罢,先开始写原理吧,反正恐怕也要写几天的前言嘿嘿,估计今天写不了多少,就叫前言吧,下次再写原理说到skin技术,大家都不会陌生,最早接触这东西,可能是winamp吧,可以灵活的更换界面风格,非常的花哨。后来使用skin的软件就越来越多了,毕竟做一个漂亮的界面对软件还是很
2004-12-14 10:15:00 1627 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 964
原创 消除屏幕闪烁
由于作图过于复杂和频繁,所以时常出现闪烁的情况,一些防止闪烁的方法,如下:(1)将Invalidate()替换为InvalidateRect()。Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。不要为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,事实上
2004-12-09 13:39:00 1678
原创 解决Windows 程序界面闪烁问题的一些经验 (转载)
一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般
2004-12-06 09:46:00 758
原创 美化CListCtrl中显示的焦点行
经常使用ClistCtrl来显示大量的数据,但是总感觉焦点行的背景颜色为蓝色,显示的效果挺难看的,参考《MFC技术内幕》这本书中的例子,自己修改了ClistCtrl的OnPaint代码,把焦点行改为白色的背景,加了一个矩形的边框,下面实际的效果,自我感觉还不错; 实现思路:1、 首先调用Default,让ClistCtrl自己画2、 调用GetDC()函数获得DC
2004-12-02 10:05:00 1475 1
原创 在CScrollView中使用双缓存画图的拖动问题
原因: 在CScrollView中需要画图功能,而且画图的大小超过屏幕的实际大小,为了解决屏幕闪烁的问题,采用了双缓存画图的方法(在内存首先画出图象,然后粘贴到屏幕上),然而,当拖动滚动条的时候,产生了屏幕重叠的问题,下面是具体的解决方法;思路: 首先在OnDraw函数中画图,下面是简单步骤;1、 使用CreateCompatibleDC函数,生成一个内存DC2、
2004-12-01 10:46:00 2193
转载 [转贴]在DLL中使用资源(推荐)
在DLL中使用资源 现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题。 1.Win32 DLL 在Win32 DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件。然后使用DialogBox或者Crea
2004-11-23 10:12:00 864
原创 解决CListCtrl中第一列元素的只有左对齐问题的两种方法?
问题:在CListCtrl中第一列元素只能左对齐,下面是msdn中的说明!CListCtrl::InsertColumnInserts a new column in a list view control. int InsertColumn( int nCol, const LVCOLUMN* pColumn );int InsertColumn( int nCol,
2004-11-09 11:05:00 2031 1
原创 为vc工程添加Unicode Debug和Unicode Release
通过使用unicode编译,软件可以适应多种情况,如何在自己的工程中添加这两种编译方式呢?下面是一个简单的步骤 1、新建一个工程; 2、选择“Build->Configurations”菜单 3、点击“Add”按钮,添加“Unicode Debug”-拷贝“win32 Debug”配置 添加“U
2004-11-08 09:00:00 1971
转载 [转贴]Project 2002 server安装手记
原作者:左强 http://www.mypm.net/articles/show_article_content.asp?articleID=5015Project server 的安装有些烦琐,谁让她功能强大呢,经过一段时间的摸索,我记录了我的安装过程,其中如有不对,或者我描述不清楚的地方,请联系我:Zuo2000@sh.t2-design.com
2004-11-01 10:21:00 1127
原创 使用“win32 static library”封装类的内部实现
本人在开发过程中经常使用第三方改写的界面类,添加这些类以后,整个工程结构比较复杂,给维护增加了难度,所以一直想把这些第三方的类封装起来,生成一个静态连接库,这样,在工程中就少了很多文件,整个工程结构变得比较清晰,在网上查找了一些资料,又研究了CJlibrary的源代码,终于实现了自己的目的,下面就是一个例子的实现过程。 例子目的要把一个CListCtr
2004-10-29 15:57:00 1555 1
原创 使用MFC Extension Dll 封装界面类的内部实现
我使用了一个修改CXListCtrl类,为了把这个内部实现封装起来,我使用了MFC Extension Dll方式,下面是我的实现步骤,编程环境:win2000+vc6.0 创建DLL库 第一步,创建一个MFC Extension Dll工程 第二步,把CXListCtrl加入到工程中 把*.h文件中的class C
2004-10-29 14:19:00 1732
转载 [转贴]How to get the largest available continues memory block
原文地址:http://blog.kalmbachnet.de/?postid=9Some applications require a huge amount of continues memory. And sometimes, windows is not able to satisfy the request.To find out the reason of why the vi
2004-10-25 12:01:00 816
原创 微软定义的标准类型
TypeDescriptionDeclared Inclock_t structureStores time values; used by clock. TIME.H_complex structureStores real and imaginary parts of complex numbers; used by _cabs. MATH.
2004-10-18 16:44:00 827
原创 配置sygate客户端
设置客户端 需要修改两个地方 1、 把客户端机器的网关改为sygate服务器所在机器的局域网的ip地址 2、把DNS改为sygate服务器所在机器的DNS这样客户端就可以上网了!
2004-10-09 10:43:00 1609
原创 关于IIS不支持突然ASP,只支持HTML的解决方案的一个解决方法!
http://www.donews.net/sasa/archive/2004/06/05/25471.aspx当我装了windows2000 Server的时候,IIS启动可以访问htm,但是不能运行asp,所以我采用了上面连接里面的方法!1、在“开始”->“程序”->“管理工具”->"本地用户和组 ,然后在用户里 直接用户名为IWAM_MACHINE的密码就可以了;2同步iis m
2004-09-18 15:01:00 3324 2
原创 把成员函数作为线程起始函数
// ThreadObject.h: interface for the CThreadObject class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_THREADOBJECT_H__195BAF3F_6D2E_4494_A5EA_C5F0C66F3618
2004-08-11 13:36:00 741
原创 设置多媒体定时器的起始函数为成员函数!
为了避免使用Sleep,最好能够另起一个线程,但是线程的处理函数如果是全局函数,则就不能调用和处理类的成员变量和成员函数,为了使能够在线程中处理成员变量和成员函数,必须通过一定的转换,下面就是我做的例子! // ThreadObject.h: interface for the CThreadObject class./////////////////////////////////
2004-08-11 13:35:00 1221
原创 位运算
1、让某一位变为0 使用 AND逻辑运算,运算数出了指定位为0,其余位为1, If both bits are 1, the corresponding result bit is set to 1. Otherwise, the corresponding result bit is set to 0. 2、让某一位变为1 使用或运算,让指定位变为1,其余为0 If one bit
2004-07-22 15:36:00 756
原创 启用和禁用工具栏按钮!
添加一个用户界面处理函数 1) 按照例1 3关于添加一个菜单命令处理函数所示的步骤,但是这时选用U P D AT E _ C O M M A N D _ U I,而不是C O M M A N D。 2) 添加下面的代码到新的处理函数中,如果要启用菜单项,则m _ b W z d为T R U E。 void CWzdVi e w : : O n U p d a t e
2004-07-20 11:49:00 1757
原创 如何在word文档中编辑复杂数学公式
在word的菜单中选择“插入”->“对象”,然后在“新建”页中选择“Microsoft 公式 3.0”,就可以编辑出合适的公式了!
2004-07-15 11:32:00 3895 2
原创 如何SDI、MDI的ChildFrame初始化为最大化窗口?
有两种方式可以让子窗口最大化,一种是在动态创建CChildFrame的时候,一种是在创建CChildFrame以后,显示CChildFrame的时候: 1、动态创建CChildFrame窗口,代码如下: CCreateContext context; context.m_pCurrentDoc=pDocument; context.m_pNewDocTempla
2004-07-15 09:04:00 2531 3
原创 为CString 类型数据添加回车换行符!
在CString中不能直接访问指定位置的字符,所有要GetBuffer获得字符串指针,然后在字符串末尾添加回车、换行字符(回车的ASCII码是13,换行的ASCII码是10); 例子代码: CString strTemp; LPTSTR pStr; int nLen=strTemp.GetLength(); pStr=strTemp.GetBuffer(nLen+2);
2004-07-14 14:41:00 5172 1
原创 纯资源dll库连接的LNK1120错误!
错误现象: LINK : error LNK2001: unresolved external symbol __DllMainCRTStartup@12Debug/newres.dll : fatal error LNK1120: 1 unresolved externalsError executing link.exe. 解决方法: 在Setting->Link->Project Opt
2004-07-13 12:32:00 2620
原创 使用CrystalEdit做一个文本编辑器
The package consists of three main classes: CCrystalTextBuffer class is responsible for storing lines, loading and saving text to a file. To simplify Undo/Redo command implementations, every editing
2004-07-07 14:03:00 2065 1
原创 调用DLL库
1、定义外部函数类型 typedef int(*pci7484check)(DWORD dwVendorID, DWORD dwDeviceID, BOOL fUseInt,int nCard);typedef int(*pci7484ad)(long hPlx, BOOL fLocalAddr,int ch); 2、打开动态库文件 m_pci7484dll=LoadLibrary("pci748
2004-06-30 14:20:00 905
原创 常用ASCII 码对照表
ASCII码 键盘 ASCII 码 键盘 ASCII 码 键盘 ASCII 码 键盘 27 ESC 32 SPACE 33 ! 34 " 35 # 36 $ 37 % 38 & 39 40 ( 41 ) 42 * 43 + 44 45 - 46 . 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 :
2004-06-29 16:12:00 4322 1
转载 [转贴]论调用约定
在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递参数
2004-06-28 14:55:00 1652 1
转载 [转贴]动态链结函式库
前言 本章要介绍的是动态链结函式库(Dynamic Linked Library,简称DLL)的撰写、使用及相关主题。动态链结函式库是Windows程式设计的一门重要领域,不信的话,你可以看看在Windows系统目录下那些数量庞大的 .DLL档案,它的重要性及使用频率由此可见一般。 基本上,如果略去VCL软体元件不谈的话,在C++Builder中撰写及使用DLL的方法是和传统Windows S
2004-06-28 14:47:00 999
原创 dll中函数定义的关键词
1、extern "C" 是用来告诉编译器,以C的方式来命名,而不要以C++ 的命名法,因为C++ 的命名法会在函式名称後加上参数型态等装饰字,如此会造成其他程式如VC++,VB等无法使用的困扰。 2、__declspec关键字,它可以传入dllimport及dllexport两个参数,用来分别代表输入函数及输出函数。输出函数,必须使用 __declspec(dllexport) 来定义该函数,反
2004-06-28 14:45:00 1017
原创 打印屏幕内容大小和实际打印效果匹配!
方法1:修改OnPrepareDC函数 pDC->SetMapMode(MM_ANISOTROPIC); CSize size=CSize(800,560); pDC->SetWindowExt(size); //设定窗口大小 //得到打印机每逻辑英寸的像素数量 int xLogPixPerInch= pDC->GetDeviceCaps(LOGPIXELSX); int yLogPixPerI
2004-06-28 12:13:00 1033
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人