我没试过,是不是是这样的。
hwnd_top是让一个窗口一直保持顶层,,所谓的Z序应该是窗口的创建顺序。比如顺序创建有3个窗口A,B,C,其中C为hwnd_top,那么即使选中A让起处于激活状态,C仍然在A上面。
hwnd_topmost也是让一个窗口保持在顶层,假如创建有4个窗口A,B,C,D,AB为非顶层,CD为顶层,那么即使选种AB任何一个处于激活状态,C或D还是在顶层;但当C或D其中一个处于选中激活状态,都会处于另外三个之上,这也就是说明了,为什么QQ选择hwnd_topmost;假如你开了2个QQ,那么那个选择了就处于那个之上,但两个QQ都处于其他的窗口之上。
至于hwnd_top跟hwnd_topmost,你可以试下那个在上面。
hwnd_top是让一个窗口一直保持顶层,,所谓的Z序应该是窗口的创建顺序。比如顺序创建有3个窗口A,B,C,其中C为hwnd_top,那么即使选中A让起处于激活状态,C仍然在A上面。
hwnd_topmost也是让一个窗口保持在顶层,假如创建有4个窗口A,B,C,D,AB为非顶层,CD为顶层,那么即使选种AB任何一个处于激活状态,C或D还是在顶层;但当C或D其中一个处于选中激活状态,都会处于另外三个之上,这也就是说明了,为什么QQ选择hwnd_topmost;假如你开了2个QQ,那么那个选择了就处于那个之上,但两个QQ都处于其他的窗口之上。
至于hwnd_top跟hwnd_topmost,你可以试下那个在上面。
解决方案 »
- CMFCToolBar::SetMenuSizes(CSize(32,32), CSize(14,14)); //CMFCToolBar可以改变菜单按钮大小
- BCG CBCGPVisualManager2007 风格问题
- opengl 的显示结果为什么会变动!!!!!!这不是动画!
- 请教一道题目“如何在指定内存空间上强制调用类的构造函数”
- 现金购买udp穿透各种nat和防火墙的资料和代码
- CListCtrl 为什么下面的代码死活不能加载图标?
- 问个串口的问题
- 如何将一个2560*1920的JPG文件转换为100*75的BMP文件???
- 在VC6中,通过菜单file->new向一个工程加.h和.cpp文件,编译报这个错误?--给100分
- 菜鸟的问题!!!!如何把敲回车键的动作送入一个变量?
- 使用VS2010时 出现如下错误:DAO database classes not supported in the library variant
- error C2094: 标签“stop_clieanup”未定义
而HWND_TOPMOST是所有窗口置顶,不管有没有父窗口,它都是跑到最顶层。
我们看 百度对setwindowpos中的hwnd_topmost的解释,还有msdn的解释,都解释hwnd_topmost为:"在非顶层窗口",这里所说的非顶层 容易误解人。 比如,子控件,如按钮等也是属于非顶层。用定时器hwnd_top 试试,看 普通窗口会不会顶到最前面去, 结果大吃一惊,发现窗口是会顶到最前面。但是在某些情况下,依然无法顶到最前面。 至于原因,我不清楚。但是定时器hwnd_topmost,就一定可以顶到最前面。总结:hwnd_top似乎不是对应着我说的第1类。
hwnd_topmost似乎是对应着我说的第3类
这里有个参考.先不管父子窗口问题. 只说兄弟窗口先要说说Z-ORDER, 即是一个窗口队列, 标识了了窗口层叠关系.
在这个z-order中TOPMOST窗口始终是在非TOPMOST窗口的上面, 这涉及到排序规则.
因为有TOPMOST属性, 就可以把窗口分为两类, TOPMOST和 非TOPMOST.现在就好解释了.
HWND_TOPMOST就是把窗口设置成最顶层窗口, 相当于直接把窗口放到队列的最前面.
HWND_TOP就要分两种情况了,
1. 如果窗口本身是 非TOPMOST 的, 则窗口被提到所有 非TOPMOST 窗口的最前面, 但仍然在所以TOPMOST窗口的后面.
2. 如果窗口本身是TOPMOST, 这时效果跟HWND_TOPMOST相同.所以说:
"类似QQ 的顶层窗口,据说是定时器不断的hwnd_topmost,而非hwnd_top"
因为一次HWND_TOPMOST就可以实现, 为什么还要去HWND_TOP呢. 并且QQ还有可能被其它程序强行改成非TOPMOST的情况, 所以直接HWND_TOPMOST是最好的方法了.
大牛2个小问题1.TOPMOST属性 请问 这是什么属性,比如对话框,或者一个Cmainframe,我如何设置?是靠setwindowpos还是说创建窗口的时候,指定属性,这个我真不知道。2.因为一次HWND_TOPMOST 一次是不可能搞定的, 其他全屏程序也可以hwnd_topmost的,依然会挡住你的窗口
2. 所以说QQ那些需要定时的设置HWND_TOPMOST, 这样就能定时保证其在z-order的最前方式, 这个z-order是指所有有TOPMOST属性的窗口的z-order.
这个问题我已经在#6里说过, 就是你设置了TOPMOST, 其它窗口又设置了TOPMOST,就被"抢"了"沙发", 你只有重新再"插队"抢回来.BOOL SetWindowPos(
HWND hWnd,
HWND hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
UINT uFlags
);
你仔细看第二个参数的意思, 是指插入到哪个窗口的后面, HWND_TOPMOST就是指最上面了.
HWND_TOP就是指非TOPMOST的最上面.
HWND_xxxx都是代表一个插入位置.
pop_up也是窗口, 原理是一样的撒.如果是某个窗口中弹出的pop_up就会在这个窗口的上面.
如果是一个pop_up独立窗口, 那弹出来如果激活即会抢占HWND_TOP.
其实这些情况, 你都可以自己写代码来实验的, 别人说的都不一定完全正确, 代码与结果才是真实的反应. "实践才是检验真理的唯一标准"