看了两天的WinCE大排档,norains写的,总感觉懂得了点什么又感觉没有,还是写点东西让这种模模糊糊的感觉变得真实和确切点吧。

    第一章norians主要就讲了个建立一个空的窗口,用WinCE建以前我也学过,主要就是CreateWindowEx这个函数的几个参数的配置,还有对于注册表的封装,在WinCE中实现对注册表的读写操作,将这些写起来比较复杂的函数封装成一个个简单的直接调用的函数。

   第二章内容讲的有点多,首先是对CMemDC进行封装,这样用缓存DC的时候更加方便。然后讲了一个iPhone手势滑动的特效,这个跟我之前做的文件浏览器的滑动过程相似,但他用的WinCE区别在于继承了CMemDC,自定义消息响应函数。接着是CImager的封装简化,利用DirectDraw,调用CoInitializeEx初始化创建一个ImageFactory,然后读取图片文件并转化为Stream,结合这两者创建合适的Decoder(×××),CreateImageDecoder,创建成功后必须TerminateDecoder,接下来就可以对×××就行初始化,然后开始解码,这个解码和结束解码的操作都是固定的,注意在绘制Gif文件的时候还需要创建一个线程用来动态显示,然后在线程中打开文件,设置当前帧,,获取当前帧所需要的延迟时间,并且Sleep(),以及要知道获取帧的总数,如果当前帧大于总数,则从0开始记。

  还讲了一个BMP文件的保存,这个以前我也学过一点,BMP文件的组成是有三个部分,文件头信息、图片信息、数据。我们按照这三个部分信息参数给他赋值就能显示BMP文件,不过有一点区别是以前说BMP文件的点是从左下角开始绘画到右上角结束,而这里似乎不需要这样,还有对于计算文件头信息时的bfSize,需要将点的个数分成4的倍数,即(picWidth * 3+3)/4 *4这样即可,我觉得norains的算法有点复杂。

  最后讲到了一个半透明的效果,这里有一个关键的函数是::AlphaBlend(memDC.GetDC(),0,0,sizeMemDC.cx,sizeMemDC.cy, hdcBmp,0, 0,WND_WIDTH, WND_HEIGHT,blendFunction);

     第三章首先说了一个录音的封装,WAV格式的文件有4大块,RIFF WAVE、Format、Fact和Data,文件头的信息由一个WriteFileHeader完成,然后是waveInOpen,初始化录制缓存,然后waveInStart(开始录制),然后通过回调函数接收消息,将录制的声音数据保存到文件中,最后是停止录制。