hoodlum1980 ( 發發 ) 的技术博客

——ZJU: 百十载,求是魂,求是创新(领域:c/c++, c#, .NET, Compact Framework, WinCE,Matlab,PhotoShop,数字图像处理,电力系统自动化,继电保护)
posts - 46, comments - 51, trackbacks - 0, articles - 1

2008年7月15日

     摘要: 这里主要是我最近一段时间在中国编程论坛中发表的C语言板块的帖子和回帖等,主要选取了我个人发表的一些原创C语言代码(全部采用TC2.0进行编译),有少量属于我的一部分研究和学习过程中写的非原创性代码在说明文件中有注明,还有很多比较优秀的我收集的代码,因为并非我的原创而不位于该压缩包内。OUTPUT文件夹中有一部分代码的编译结果,对代码这里就不再一一讲解了。  阅读全文

posted @ 2008-08-19 20:43 hoodlum1980 阅读(51) | 评论 (0)编辑

(1)已知一个位图句柄(HBITMAP),如何获取位图的宽度和高度?

在C#中非常简单,只需要直接访问bitmap.Width和Height属性即可。

在Platform SDK中,GetBitmapDimensionEx是不能完成这个功能的(它需要事先调用SetBitmapDimensionEx),

而使用GetObject函数来获取GDIOBJECT的信息,如下代码:

 

 HBITMAP hBitmap;

 BITMAP bminfo;

 GetObject(hBitmap, sizeof(BITMAP), &bminfo);

 

 从 bminfo.bmWidth 以及 bmHeight属性可以得到。

 

(2)如何从一个本地文件路径加载一个HBITMAP?

 

LoadBitmap可以从HINSTANCE中加载位图资源,但是无法从文件名中加载。要完成这个任务,需要使用LoadImage。

例如:

char* strFileName="c:\\a.bmp";

HBITMAP hBitmap= (HBITMAP)LoadImage(NULL, strFileName, IMAGE_BITMAP,0,0,LR_LOADFROMFILE);

 

但LoadImage函数只能加载BMP文件,无法成功加载JPG格式。如果要加载JPG格式,应使用OleLoadPicturePath获取一个IPicture接口对象,调用其Render函数在指定的DC进行绘制。

 

(3)如何使ActiveX控件重绘?

要使在IE中的ActiveX控件,可以调用this->FireViewChange();

 

             (to be continued...)

 

posted @ 2008-08-14 22:41 hoodlum1980 阅读(41) | 评论 (0)编辑

     摘要: 本文分析了系统设计师教程中的数据结构章节的部分代码,并分析和图解了对树和图两种基本数据结构的遍历。  阅读全文

posted @ 2008-08-10 13:57 hoodlum1980 阅读(53) | 评论 (0)编辑

       发布一个在wince操作系统下,采用.net compact framework 1.0 ( c#)开发的矢量图控件,我于2007年3月份集中一个月的经历完成了它。当然,它的前身是2005年12月我写的第一个矢量图控件,在后来我在此基础上改进了很多地方,针对具体应用做了重新设计并集中精力把它完成,由于属于再次设计,因此它的架构设计和编码中凝聚了我此前开发中的经验和积累,它是我当时最满意的一个模块,对它的架构和可维护性以及运行性能都感到令我感到非常满意,可以说代表了我当时的最高水平。当然从今天来看里面还有一些缺点和经验不足之处。

       例子代码我命名为GisCtl,是因为它原本是希望完成GIS的功能,但是实际上距离GIS还有一定的距离和偏差。该模块的底层算法和全部编码全部是我独自设计,这其中涉及了一系列图形捕捉算法,图元几何变换和逆变换,图层管理,缩略图,视图参数缓存环形队列,文件格式定义和IO等等。在编写该模块中的一些算法时我积累了很厚的演算草稿纸,用到了很多数学和几何知识,当然也感谢飘渺水云间BBS上ZOL版一些热心网友的支持和对我的解答。在编写这个模块时,涉及到一些设计模式,数据结构,算法的应用,比如鼠标在图上点击选择对象时,有一系列判别算法。比如图元和链接对象采用了是类似flyweight模式以节省内存(在我的另一篇随笔《图元几何变换与flyweight模式》中有讲解),比如视图缓存采用了环形的数据结构(在《环形视图堆栈》中有讲述),比如导航图采用了观察者(订阅)模式。该模块的使用方法集中在例子里,这里就不再叙述了。文档说明还暂时不能提供。目前该模块能读写我的自定义格式图形文件,以及mif格式文件。由于需求,该控件没有包装例如用鼠标创建,拖曳,变换对象的操作,但可以用代码来实现这些功能。      

       这个模块属于我实际工作的项目的一部分。我希望它能发挥更大的价值,而不仅仅是沉寂。

       该模块文件名是LineViewCtl.dll, 命名控件是LineViewLib;该dll位于压缩包内,项目中也附带了两个从实际系统中导出的图形文件。

       在模拟器中运行的效果图:(由于模拟器不支持中文,所以中文没能正确显示)

         

           范例代码:

           http://files.cnblogs.com/hoodlum1980/JRL_GisCtlDemo.rar

           GisCtlDemo.rar 

posted @ 2008-08-07 04:18 hoodlum1980 阅读(248) | 评论 (7)编辑

        这是一个小的例子在于演示SendMessage和PostMessage的区别,其区别简单来说,就是前者会等待对方的窗口过程返回,后者则仅仅给对方的消息队列中投放一个消息立即返回,不会阻塞。因此两个函数的返回值不同,前者为窗口过程的返回值(LRESULT),后者仅投递消息,因此仅返回BOOL表示是否投递成功。
      
       源代码下载链接(VC6):
       http://www.cnblogs.com/Files/hoodlum1980/SendMsgTest.rar
      

posted @ 2008-07-15 23:16 hoodlum1980 阅读(63) | 评论 (0)编辑