第一个很好解决,确定位图后生成一个多边形,再设定窗口区域就行了
好像是用 CreatePolygonRgn, SetWindowRgn 两个函数搞定第二个用 MDI 比较简单,否则要自己裁剪窗口,也可以但是很麻烦。

解决方案 »

  1.   

       做不规则窗口的话可以用函数SetWindowRgn()函数,将一个构造好的区域赋给一个窗口,我这里有一个非常酷的播放器的界面,有源代码,想要就和我联系吧
      

  2.   

    创建位图不规则窗口很容易,我这也有现成的实现函数。
    要使子窗口不移出主窗口,我可以提供思路:
      定义一个矩形(RECT),这个矩形位于子窗口中心区域,在Move事件中修改此矩形位置,并用RectInRgn判断其是否在主窗口区域,若超出则移动其回主窗口区域。
    也可简单的定义子窗口中心点,用PtInRgn判断。
      

  3.   

    在www.codeguru.com上有几个关于创建不规则窗体的例子,你可以参考一下,主要使用两个函数
    CreatePolygonRgn,SetWindowRgn 
      

  4.   

    关于不规则窗口的实现,我有一个简单的例子,没有实现位图功能.mail me your address.
      

  5.   

    使用位图创建区域的源代码我有,已经放在我的网页上了http://rain.cnpick.com
    或者http://breath.cnpick.com
    函数名BmpToRegion
    想要就来吧,或者给我发EMail
      

  6.   

    to breath
    知道原理,只是没时间做,也给我一份,谢谢了先
      

  7.   

    多谢各位指点,小弟这里谢了!子窗口并不是在有Move事件时才超出主窗口,而是一直超出主窗口,关于这个问题我已解决了.我把原先所有的子窗口做成popup窗口就可以了.但还有两个问题我没弄明白:
        1.  当我用GetWindowRgn得到窗口的区域后,用CRgn::PtInRegion 判断某点是否在该区域中时,发现该点明明在区域外,可CRgn::PtInRegion 却返回TRUE,这是怎么回事?如何解决?
        2.  我在某窗口中按着鼠标键移出该窗口,在该窗口外松开鼠标键,该窗口中的控件还是处于鼠标键按下时的状态,并且我发现当按着鼠标在窗口中移动时,不能捕获WM_MOUSEMOVE消息,这问题该如何解决?
       多谢各位赐教!