Learning and Debuging
个人信息
idol
文章分类
最新评论
最新留言
友情链接
日历
访客
好友
计数器
          
rss
 
推荐订阅:订阅到RSS阅读
内容
  •  
    2007-12-26 13:52:26
    标签:杂谈
     zz from Internet

    一、BSTR、LPSTR和LPWSTR 
       在Visual C++.NET的所有编程方式中,我们常常要用到这样的一些基本字符串类型,如BSTR、LPSTR和LPWSTR等。之所以出现类似上述的这些数据类型,是因为不同编程语言之间的数据交换以及对ANSI、Unicode和多字节字符集(MBCS)的支持。

      那么什么是BSTR、LPSTR以及LPWSTR呢?

      BSTR(Basic STRing,Basic字符串)是一个OLECHAR*类型的Unicode字符串。它被描述成一个与自动化相兼容的类型。由于操作系统提供相应的API函数(如SysAllocString)来管理它以及一些默认的调度代码,因此BSTR实际上就是一个COM字符串,但它却在自动化技术以外的多种场合下得到广泛使用。图1描述了BSTR的结构,其中DWORD值是字符串中实际所占用的字节数,且它的值是字符串中Unicode字符的两倍。

      LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被

  •  
    2007-12-26 13:33:41
    标签:杂谈
     zz from Internet
     
    1、将Invalidate()替换为InvalidateRect()。

      Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。虫虫以前很懒,经常为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,但是事实是,如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。

    2、禁止系统搽除你的窗口。

      系统在需要重画窗口的时候会帮你用指定的背景色来搽除窗口。可是,也许需要重画的区域也许非常小。或者,在你重画这些东西之间还要经过大量的计算才能开始。这个时候你可以禁止系统搽掉原来的图象。直到你已经计算好了所有的数据,自己把那些需要搽掉的部分用背景色覆盖掉(如:dc.FillRect(rect,&brush);rect是需要搽除的区域,brush是带背景色的刷子),再画上新的图形。要禁止系统搽除你的窗口,可以重载OnEraseBkgnd()函数,让其直接返回TRUE就可以了。如

  •  
    2007-12-26 12:13:24
    标签:杂谈

     zz from Internet

     

       显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈
    我的一些观点。
    1、显示的图形为什么会闪烁?
    我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看起来在闪。如果将背景刷设置成NULL,这样无论怎样重绘图形都不会闪了。
    当然,这样做会使得窗口的显示乱成一团,因为重绘时没有背景色对原来绘制的图形进行清除,而又叠加上了新的图形。
    有的人会说,闪烁是因为绘图的速度太慢或者显示的图形太复杂造成的,

  •  
    2007-12-26 11:51:34
    标签:杂谈
     zz from Internet
     
      画笔是用来绘制各种直线和曲线的一种图形工具,GDI+的Pen类为画笔提供了丰富的方法。一般来说,我们可以通过其构造函数来指定画笔的颜色和宽度,其定义如下:

    Pen( const Color& color, REAL width );

      其中,color是用来指定画笔颜色,width用来指定画笔宽度。REAL是一个float类型定义,而Color是GDI+的一个颜色类,它既可以指定一个ARGB颜色类型,也可以使用GDI+预定义的颜色值,甚至可以将COLORREF转换成Color类型的颜色。例如,下面的代码都是创建一个宽度为3,颜色为蓝色的画笔:

    Pen newPen( Color( 255, 0, 0, 255 ), 3 );

    Pen newPen(Color( 0, 0, 255), 3);
    // 当Color只有
  •  
    2007-12-20 19:04:19
     zz from Internet
     摘 要 伪随机数在计算机软件设计中有很广泛的用途。本文介绍了基于数学方法的利用计算机产生伪随机数的一种方法,即线性同余法,任何伪随机数的产生都是运用递推的原理来生成的。以及在Visual C++环境中产生伪随机数的两个重要函数,rand和srand函数,正确地使用这两个函数是产生性能良好的伪随机数的关键,最后介绍了利用伪随机数生成技术在MFC中生成基于C/S模式应用程序的随机校验码以及利用一种软件工具ImagePassword产生随机密码。

       关键词 伪随机数生成;线性同余法;Visual C++;随机校验码

      为追求真正的随机序列,人们曾采用很多种原始的物理方法用于生成一定范围内满足精度(位数)的均匀分布序列,其缺点在于:速度慢、效率低、需占用大量存储空间且不可重现等。为满足计算机模拟研究的需求,人们转而研究用算法生成模拟各种概率分布的伪随机序列。伪随机数是指用数学递推公式所产生的随机数。从实用的角度看,获取这种数的最简单和最自然的方法是利用计算机语言的函数库提供的随机
  •  
    2007-11-26 16:35:21
     
    zz

    本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:

    1. 大致了解MFC框架的基本运作原理;

    2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制;

    3. 熟悉OOP理论和技术;

    本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。

     

     

  •  
    2007-11-23 15:15:17
     ZZ From Internet
     

    树形控件TreeCtrl和下节要讲的列表控件 ListCtrl在系统中大量被使用,例如Windows资源管理器就是一个典型的例子。

    树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用
    BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的专用风格:

    • TVS_HASLINES 在父/子结点之间绘制连线
    • TVS_LINESATROOT 在根/子结点之间绘制连线
  •  
    2007-11-15 14:54:58
     zz from Internet
     

    MFC里面,Pretranslatemessage是一个很重要的虚函数。这个函数的作用这里就不谈了,很多地方都有涉及,这里只谈一下其实现的机制。
    谈到PretranslateMessage的实现,便不得不谈到MFC消息循环的实现。MFC通过CWinApp类中的Pumpmessage

  •  
    2007-10-19 17:11:43

     zz from Internet


    重要角色

     

      我邻居家的孩子一直在央求他的妈妈给他买新衣服,上衣是白衬衫,下面是黑色的短裤。

     

      他的妈妈说:“老师怎么会这样啊?”

     

      我问:“怎么了?”

     

      她说他们学校要搞拔河比赛,要求男孩儿一律要穿白衬衣黑短裤,但我的孩子不用啊,因为他长得瘦小,没有被选上参赛。她是不想买的。因为孩子有很多旧衣服,“我想这孩子虚荣心太强了,看见别人穿新衣服自己也要。”

     

     

  •  
    2007-10-19 10:10:55
    右转车辆很简单,如果路口是圆灯,则随时都可以转;如果路口有右转箭头灯,则要等该灯变绿时方可右转。

    左转比较复杂。如果路口只有圆灯,则待其变绿时,即可左转;如果路口有左转箭头灯,还要看地上是否有左转等待区,如果有,就可以在直行灯绿时,将车驶入等待区,待左转灯绿后,车辆左转;如果没有左转等待区,车就得一直在线后等着,一直等到左转灯绿时,才能左转。