我想做一个像Windows下的播放器9。0版本那样的不规则界面,我在处理不规则的区域时是通过对图像进行逐点扫描再通过对区域的合并和异或来得到窗体的不规则区域的。但在计算不规则区域时由于是逐点扫描图像的所以非常慢。特别是在改变大小时总是非常慢,请问有什么解决的办法?正规的MFC处理不规则窗体时是如何实现的?

解决方案 »

  1.   

    一般都是根据一幅图来生成窗口的
    网上例子多呢
    http://www.vckbase.com/document/finddoc.asp?keyword=%B2%BB%B9%E6%D4%F2
      

  2.   

    用位图来计算,那是为了实现比较复杂形状窗口的。
    如果是准备像Windows下的播放器那种窗体,应该使用几个标准的几何形状区域加起来,这样的速度就会快得多的。
      

  3.   

    楼上的兄台.....不是吧,用几何形状不可能吧。。真不明白Windows下的播放器那种窗体是怎么实现的最重要的一点是在改变大小的时侯,速度并不慢呀。....
      

  4.   

    我用以下几行代码便产生了一个和WMP9差不多的窗体:
    CRgn rgn,rgn1;
    rgn.CreateRoundRectRgn(0,7,345,285,27,27);
    rgn1.CreateRoundRectRgn(12,250,245,344,45,40);
    rgn.CombineRgn(&rgn,&rgn1,RGN_OR);
    rgn1.DeleteObject();
    rgn1.CreateRoundRectRgn(108,0,345,327,20,20);
    rgn.CombineRgn(&rgn,&rgn1,RGN_OR);
    SetWindowRgn(rgn,true);
    构造了几个椭圆区域,组合一下。
    如果窗体不太复杂,个人觉得用这种方法简单。
      

  5.   

    1、计算型状慢,你可以自己写一个算法直接从bmp文件读取绝对要快。
    2、windows那个播放器的型状是由几部分构成的,改变大小的时候只有规则部分在改动。
    这个时候你不要重新计算大小,而直接把你的区域的情况改变一下就行了