1.如果不使用窗口样式WS_POPUP或剪切窗口,怎样能创建出一个没有非客户区的窗口,也就是没有标题栏,没有边框。(30)
2.怎样实现一个类似于很多网络游戏中聊天栏那样的半透明的窗体(Win98下也是半透明的。)(70)问题2可以再加分,:)5000分以内。

解决方案 »

  1.   

    1 用SetWindowLong进行设置2 在98下未见资料
      

  2.   

    1.用
    ModifyStyle
    ModifyStyleEx
    WS_TITLE WS_BORDER
    2.??
      

  3.   

    SetWindowLong不行的。
    我用CreateWindow创建的一个Style = 0 的窗口都还带标题栏和边框。
    然后我把创建好的窗口用SetWindowLong设置样式为0,都还有标题栏在,-_- !
      

  4.   

    问题2在WIN2000及以后的版本好象也不好实现。WS_EX_LAYERED 只能用于顶级窗口,而通常的文本处理窗口都是一个子窗口。
      

  5.   

    win98以下只能自己处理窗口内容,先得到当前窗口的图像,再得到窗口下面桌面的图像,两个图像通过某些方法(同一个坐标的两个点算出新的点的颜色,具体算法忘记了好像能用alphablend函数98),再抄回原窗口就可以了。不过不怎么好用,特别当窗口不是在最上面的时候。
      

  6.   

    我能取到我的窗口范围的图。但窗口下面(Z-Order)的图怎取,拷贝屏幕的图只能还是得到我的程序中的窗口的图。
      

  7.   

    1、Windows 里,窗口的基本类型有三种,Popup、Overlapped、Child,而不是子窗口
    的窗口只能在前两种里做一个选择,而 Overlapped 类型的必然有标题栏,所以你的
    要求不能满足,除非自己去计算非客户区的大小。
    另外,Style 为 0 时,系统会默认为是 Overlapped 风格,所以没有用。
      

  8.   

    那就是说如果不设置样式WS_POPUP或WS_CHILD就不能做到没有标题栏,没有边框的了,否则只能自己处理ON_NCCALCSIZE ?
      

  9.   

    Sorry 笔误,是 WM_NCCALCSIZE
      

  10.   

    是的。但我没有明白你为什么强制不要 WS_POPUP 风格
      

  11.   

    很简单,对于顶级窗口来讲(肯定不能用 WS_CHILD 风格),如果不设置 WS_POPUP 风格,
    就肯定是 WS_OVERLAPPED 的,因为 WS_OVERLAPPED 的值是 0,也即是窗口类型的默认设置。
      

  12.   

    呵呵,我并不是非要强制窗口不要WS_POPUP风格。是我在用VB写了一个窗口,用SPY++看了那个窗口的样式:WS_CLIPSIBLINGS | WS_CHILDREN | WS_OVERLAPPED,就这三个,而且是它没边框,没标题栏,但我在VC里面无论从CWnd继承,还是用SDK创建个窗口却怎么也不能设置成那样,所以很想搞清楚是怎么回事.
      

  13.   

    -_- 抱歉,上面又写错个地方,WS_CLIPCHILDREN.
      

  14.   

    http://www.codeguru.com/Cpp/W-D/dislog/miscellaneous/article.php/c5019/
      

  15.   

    窗口的问题很复杂,Windows 从很多方面为了开发人员的方便作了屏蔽。例如,
    没有个窗口在创建的时候,都有一个应用程序兼容版本以及窗口创建器版本的信
    息,以保证某些老的开发工具生成的应用程序可以在新的系统上以原来的方式工
    作。而你使用新的开发工具反而达不到。底层里微软为无数的软件做了特别的努
    力,例如 VB、FoxPro、Word、Excel 等。但我这也是推测,仅供参考。
      

  16.   

    sorry,“没有个”->“每一个”
      

  17.   

    :),谢谢dandycheung(珠穆朗玛)耐心的解答,谢谢.
    你看是我新开个帖子把分给你,还是麻烦你稍微等下到我结这个帖子的时候把分给你?
      

  18.   

    to : DentistryDoctor(雅克医生<改行做程序员了>) 
         :),请问一下,你提供的那个链接里面的那个东东有源码下载么?我现在在公司,网速限制,开那个连接开了N分钟,再点里面的链接就等到现在还没给我露个脸出来.
      

  19.   

    另外说一句,你计划在 98 下支持透明很困难。这个原因也很简单:
    虽然你可以在绘制的时候取一下你窗口下的内容,通过 Alpha 混合
    再进行输出,但是首先去你的窗口下的内容这一点就不好实现,复制
    屏幕不可以是因为你的窗口是可见的,你总不能先隐藏自己再复制吧?
    有两个消息可能对你有用,WM_PRINT 和 WM_PRINTCLIENT,但是这两
    个消息可能不按照微软的规范工作,尤其是很多界面库自己的实现。
    再一个很麻烦的事情是,你下面的窗口内容如果有变化,你的窗口不
    会得到任何通知,你怎么更新你的混合输出?不要指望挂钩拦截 WM_PAINT
    消息,因为还有很多动画应用,例如播放器。建议你放弃。如果你的老
    板要求你这样做,把我的建议给他看。
      

  20.   

    to : DentistryDoctor(雅克医生<改行做程序员了>) 
         你给的网站上面说的是用WS_EX_LAYERED 来实现,但是WS_EX_LAYERED在Win98中不被支持的,而且WS_EX_LAYERED样式不能用于子窗体的。那个解决不了问题的,-_-~~
      

  21.   

    你真是执着。透明窗口在很大程度上是需要有操作系统本身的支持的。因为无论
    逻辑上窗口可以划分多少层,事实上显示设备毕竟还是一个平面的东西。你的输
    出总是要由操作系统的干预才能工作。OS 在输出时总揽全局,进行必要的裁剪和
    Alpha 混合(也即透明窗口的实现机制)。自己去做这些工作是不现实的。你所
    说的游戏中的效果,有两种可能能够实现,1、全屏模式;2、窗口模式内层次完
    全由自己掌控。其核心就是,应用程序不太可能把自己绘制的东西和系统控制的
    东西在这一点上协调起来,要么全部由系统作,要么全部由自己作。我没有使用
     98,所以不知道你说的下载工具的透明窗口在 98 上是什么表现,我认为不可能
    像在 2000 以后的操作系统上一样工作。如果的确可以,麻烦告我一声,我去学
    习一下,不过千万不要是用隔点输出的方式做的。我再一次忠告你:放弃这个念头
    吧,我是个过来人。