摘要: 1, PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。而SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。而且,PostMessage的返回值表示PostMessage函数执行是否正确;而SendMessage的返回值表示其他程序处理消息后的返回值。这点大家应该都明白。 2, 如果在同一个线程内,PostMessage发送消息时,消息要先放入线程的消息队列,然后通过消息循环Dispatch到目标窗口。SendMessage发送消息时,系统直接调用目标窗口的消息处理程序,并将结果返回。Send 阅读全文
posted @ 2011-05-26 12:30 cylee025 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 我们都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到 new 上,那可就不一定正确了。我经常看到类似这样的代码: int* p = new int[SIZE]; if ( p == 0 ) // 检查 p 是否空指针 return -1; // 其它代码 其实,这里的 if ( p == 0 ) 完全是没啥意义的。C++ 里,如果 new 分配内存失败,默认是抛出异常的。所以,如果分配成功,p == 0 就绝对不会成立;而如果分配失败 阅读全文
posted @ 2011-05-25 22:13 cylee025 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造函数能解决一些我们常常会忽略的问题。 为了说明复制构造函数作用,我先说说我们在编程时会遇到的一些问题。对于C++中的函数,我们应该很熟悉了,因为平常经常使用;对于类的对象,我们也很熟悉,因为我们也经常写各种各样的类,使用各种各样的对象;对于指针的操作,我们也不陌生吧?嗯,如果你还不了解上面三个概念的话,我想这篇文章不太适合你,不过看看也无碍^_^。我们经常使用函数,传递过各种各样 阅读全文
posted @ 2011-05-24 19:47 cylee025 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 在C语言的stdarg.h头文件中提供了三个函数va_start, va_end,va_arg和一个类型va_list。利用它们,我们可以很容易实现一个可变参数的函数。首先简单介绍一下这三个函数。假设现在有一个名为f的函数,其函数定义为:void f(int a, int b, ...)那么,在函数的内部,为了获得这些可变参数,就需要利用到va_start、va_arg和va_end三个函数。va_list类型的变量可以用于存储可变类型的变量,用它可以对可变变量进行遍历;va_list ap在使用ap之前,必须调用va_start使得ap和可变参数进行关联;va_start(ap, b);va 阅读全文
posted @ 2011-05-23 22:18 cylee025 阅读(14473) 评论(0) 推荐(2) 编辑
摘要: 堆排序法利用二叉树最大堆实现对数字的排序。其排序的时间为O(nlgn)。本文给出了一个堆排序算法的简单实现(利用C++),希望对大家有用。该排序算法主要利用了二叉树最大堆的以下属性:属性定义:二叉树最大堆的任意节点的值小于等于其父节点的值;根据该定义,便可以按照以下步骤轻松实现堆排序算法:利用输入的数组建立一个最大堆,则最大堆的根节点为数组元素中的最大值;将根节点的值和最后一个节点值进行交换(实际上就是将最大值存入数组的最后一个位置中)利用堆中剩余的所有节点再次建立一个二叉树最大堆;然后进行第一和第二步操作;这样,每完成一次操作,堆中的节点便减少一个;由于时间关系,该算法的实现细节不予讨论,一 阅读全文
posted @ 2011-05-16 17:46 cylee025 阅读(1955) 评论(0) 推荐(0) 编辑
摘要: 快速排序法(QuickSort)是一种非常快的对比排序方法。它也Divide-And-Conquer思想的实现之一。自从其产生以来,快速排序理论得到了极大的改进,然而在实际中却十分难以编程出正确健壮的代码。本文将对快速排序算法的基本理论和编程实践方面做作一个全面的讲解。在本文讲解中,将忽略很多细枝末节,试图给读者形成一个非常具体的快速排序形象。1.快速排序---基本理论因为该算法是Divide-And-Conquer思想的一个实现,所以本文将以Divide-And-Conquer思想对其进行分析。首先,假设所要排序的数字存储在数组S中,则该算法的操作可以拆分为两部分:在S中选出一个元素v;将S 阅读全文
posted @ 2011-05-11 22:09 cylee025 阅读(38637) 评论(7) 推荐(0) 编辑
摘要: //========================================================================//TITLE:// MultiByteToWideChar和WideCharToMultiByte用法详解//AUTHOR:// norains//DATE:// 第一版:Monday 25-December -2006// 增补版:Wednesday 27-December -2006// 修订版:Wednesday 14-March-2007 (修正之前的错误例子)//Environment:// EVC4.0 + Standard SDK/ 阅读全文
posted @ 2011-05-05 22:20 cylee025 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 当创建一些简单的形如只包含了一些BUTTON的DialogBar的时候,是不需要从CDialogBar派生,因为CDialogBar本身就是从CControlBar派生而来,它可以接收任何的通告消息。然而,在一下的诸多较为复杂的情形下,我们就需要利用CDialogBar派生出自己的类了(子控件是指用作子窗口的控件------个人理解)。dialogbar包含了具有drop-down属性的COMBOBOX;dialogbar包含了treeview或者tree控件,listview, list控件;dialogbar包含了ActiveX控件;诸如上面所说的任何较为复杂的情形下,我们都应该对Dial 阅读全文
posted @ 2011-05-04 10:18 cylee025 阅读(2111) 评论(0) 推荐(1) 编辑
摘要: 转自:http://www.cppblog.com/coloerful/archive/2009/06/01/86368.html获取工具条的指针在缺省状态下,有一个默认的工具条AFX_IDW_TOOLBAR,我们可以根据相应的ID去获取工具条指针,方法如下: CToolBar* pToolBar=(CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);是不是很简单?获取状态条的指针在缺省状态下,有一个默认的状态条AFX_IDW_STATUS_BAR,我们自然也可以根据相应的ID去获取状态条指针,方法如下: CSt 阅读全文
posted @ 2011-05-01 20:41 cylee025 阅读(1451) 评论(0) 推荐(0) 编辑
摘要: 2009-06-26 10:48这几乎是每个人都会遇到的问题,因为我们是中国人,中国人编程不可避免的要输出汉字,哈哈,废话少说看看下面我转载的一篇文章 ,总结的还算全面。这几天研究Unicode,勤快些,把看到的东西觉得有用的都copy了下来,文章是拼凑出来的,所以看起来会觉得有些乱 :)。1. wprintfQ : sizeof(wchar_t) = ?A : 随编译器不同。(所以:在需要跨平台的时候尽量不用wchar_t) vc : sizeof(wchar_t) = 2;Q: 在vc中,为什么直接使用wprintf(L"测试1234")会没有结果A: 没有设置好loc 阅读全文
posted @ 2011-04-28 09:42 cylee025 阅读(3472) 评论(0) 推荐(0) 编辑