想创建一个在父窗口外边的子窗口,并且子窗口激活时父窗口标题栏依然处于活动状态,这种性质就是有点类似子窗口就是父窗口的工具栏一样.

解决方案 »

  1.   

    定义一个子窗口类的实例,然后用子窗口类的Create、ShowWindow,Create时Parent给NULL。
      

  2.   

    photoshop那样的停靠栏?
    -------------------------------------
    有点类似,但不需要象工具栏那样停靠或自动调整.
      

  3.   

    photoshop那样,LZ可以用Spy++查一下photoshop主窗口和子窗口的风格,按照它的风格来设置。
      

  4.   

    同意1楼:
    定义一个子窗口类的实例,然后用子窗口类的Create、ShowWindow,Create时Parent给NULL。先用在资源文件里画一个Dialog
    然后ctrl+w打开Class Wizard,它会让你创建一个继承CDialog的类,
    CDialog *abc = new CxxxDialog;   //你创建的CDialog子类
    abc.Create("IDD_xxx");           //资源文件定义的Dialog
    abc->ShowWindow(SW_SHOW);
      

  5.   

    在google上查了查,好象有人问过,但一直没解决,看来是一个比较高难度的问题啊.
      

  6.   

    一个子窗口类的实例,然后用子窗口类的Create、ShowWindow,Create时Parent给NULL
      

  7.   

    有一个简单的办法可以做到在其它窗口激活时主窗口看上去仍然处于活动状态:
    截获主窗口的WM_NCACTIVATE消息然后判断如果WParam == FALSE时,只要将WParam改为TRUE再调用DefWindowProc就可以了。 这样尽管主窗口实际上已经失去焦点, 但标题栏看上去还是处于活动状态。 当然, 可以进一步判断一下是不是由于你期望的那个窗口激活引起主窗口失活的, 如果是那么可以进行上面的修改, 如果不是则不做改动。 
    可以通过判断LParam是否等于你关心窗口的handle进行这一判断 (据说WM_NCACTIVATE的LParam和WM_ACTIVATE是一致的, 并不是MSDN上描述的“This parameter is not used.“那样)
      

  8.   

    Idle_,这个我有试过,但确实父窗口会失去焦点,并且标题栏有时候会绘制异常.象工具栏一类的窗口是不会触发父窗口的焦点事件的,而我正需要这样的.
      

  9.   

    photoshop那样,LZ可以用Spy++查一下photoshop主窗口和子窗口的风格,按照它的风格来设置。
    -------------------------------------------------------------------------------
    窗口太多了,不知道哪个是工具栏窗口,能指点下怎么看吗?
      

  10.   

    Spy++中点Find按钮(望远镜)或者Alt+F3,会弹出一个对话框,点住Finder Tool后面那个图标不放,拖到你要查的窗口或控件上再放开,然后点OK就可以看了。
      

  11.   

    谢谢cnzdgs,我按它的WS和WS_EX设置窗口还是没什么作用,真是郁闷啊.
      

  12.   

    你的窗口显示出来也用SPY++看看,是不是没设上。
      

  13.   

    有可能窗口类必须使用ToolWindow32,好象必须注册窗口类,有点麻烦,不知道怎么与MFC配合.
      

  14.   

    ToolWindow32我不知道是什么。
    注册窗口类倒没什么,只要在CreateWindow之前注册就行。
      

  15.   

    CDialogBar与它的父窗口总是在相同的活动状态,无论你怎么点CDialogBar,它的父窗口总是在焦点状态,而且点CDialogBar时父窗口并不会发生KillFocus事件,现在就是不知道它这种关系是怎么实现的,怎么用CDialog来实现CDialogBar的这种行为,
    有人用NcActivate来实现这样的效果,但这会出现很多问题.
      

  16.   

    应该是从xxxxBar变来的。ToolWindow32,大虾能不能介绍一下。
      

  17.   

    是ToolBarWindow32.
    看来没招了,只好用WS_DISABLED风格了.
      

  18.   

    让窗口标题栏依然处于活动状态的方法我无意中找到了,只要在WM_NCACTIVATE消息处理中返回false就可以了。
      

  19.   

    cnzdgs你好,我在18楼说了,用NcActivate来实现这样的效果会出现很多问题,比如有时候绘制不完整,最主要会触发父窗口的焦点事件。
      

  20.   

    我简单试了一下,没发生问题。按我理解,在WM_NCACTIVATE消息处理中返回false只是告诉系统不要把标题栏画成非活动的状态,不会有其它影响。