//========================================================================
//TITLE:
// 说说WinCE的WS_EX_TOPMOST和窗口置顶显示
//AUTHOR:
// norains
//DATE:
// Tuesday 18-September-2007
//Environment:
// EVC4.0 + Windows CE 5.0 Standard SDK
//========================================================================
常写代码的朋友对WS_EX_TOPMOST和SetForegroundWindow()应该都不会陌生,前者在CreateWindowEx时设置窗口属性为置顶,后者是将某个窗口提至Z轴最前.如果有一个窗口A属性是WS_EX_TOPMOST(本文称之为TOPMOST窗口),窗口B不具备WS_EX_TOPMOST属性(本文称之为NOTOPMOST窗口),那么用SetForegroundWindow()提升窗口B的位置会是何种情况?答案是窗口B永远不可能在窗口A前显示!
为简便叙述,以列表形式说明
不过需要注意的是,在有子窗口的情形下,如果子窗口没有设置WS_EX_TOPMOST,即使父窗口设置了,该窗口也不属于TOPMOST窗口,而是比TOPMOST低一级别(本文称之HALFTOPMOST窗口):调用SetForegroundWindow()后,它可以在显示在NOTOPMOST窗口之前,却而无法在TOPMOST窗口前显示.换句话说,HALFTOPMOST窗口和NOTOPMOST窗口一起时,表现类似于TOPMOST窗口;而和TOPMOST窗口一起时,则更接近于NOTOPMOST.
这是一个典型的创建HALFTOPMOST的例子代码:
//主窗口
HWNDhWnd=CreateWindowEx(WS_EX_TOPMOST,
WND_CLASS,
WND_TITLE,
WS_VISIBLE,
0,
0,
320,
240,
NULL,
NULL,
hInstance,
NULL
);
InitCommonControls();
//子窗口
HWNDhWndLst=CreateWindowEx(0,//如果需要整個窗口為TOPMOST,則這里必須要設置為WS_EX_TOPMOST
WC_LISTVIEW,
TEXT(""),
LVS_REPORT|LVS_SINGLESEL|LVS_NOCOLUMNHEADER|WS_VISIBLE|WS_CHILD|WS_VSCROLL,
1,
1,
100,
100,
hWnd,
NULL,
hInstance,
NULL);
如果想让该窗口成为TOPMOST,只需要在创建子窗口时令其具备WS_EX_TOPMOST属性即可.
虽然本文之前一直是以CreateWindowEx来创建不同层次的窗口,但其实我们也可以在创建之后更改其属性.方法很简单,只要调用SetWindowPos函数即可:
//将窗口更改为TOPMOST
SetWindowPos(hWnd,HWND_TOPMOST,0,0,800,480,SWP_SHOWWINDOW);
如果需要更改包含子窗口的主窗口,稍微有一些麻烦,因为在WinCE下不支持FindWindowEx()函数,不过所幸我们尚有GetWindow替代.以下代码展示了如何更改只包含一个子窗口的主窗口的层次属性(如果是包含多个子窗口,只需要循环判断即可):
HWNDhWndParent=FindWindow(MAIN_WND_NAME,MAIN_WND_CLASS);
if(hWndParent!=NULL)
{
HWNDhWndChild=GetWindow(hWndParent,GW_CHILD);
if(hWndChild!=NULL)
{
SetWindowPos(hWndChild,HWND_TOPMOST,0,0,800,480,SWP_SHOWWINDOW);
}
SetWindowPos(hWndParent,HWND_TOPMOST,0,0,800,480,SWP_SHOWWINDOW);
}
分享到:
相关推荐
窗口置顶软件——TopMost,可以将任意窗口置顶
该小工具能够让任意窗口始终保持在最顶端,方便实用.
TopMost窗口置顶,一个能让窗口一直在最前面的工具,很方便,
Public Const WS_EX_TOPMOST As Long = &H8& Public Const WS_EX_TRANSPARENT As Long = &H20& Public Const WS_GROUP As Long = &H20000 Public Const WS_HSCROLL As Long = &H100000 Public Const WS_ICONIC As ...
CreateWindowEx(WS_EX_TOPMOST, ClassName, 'Form1', WS_VISIBLE or WS_TILED or WS_SYSMENU or WS_MINIMIZEBOX or WS_SIZEBOX, 200, 200, 200, 100, 0, 0, HInstance, nil); end; begin Register_MainForm; ...
cs.dwExStyle = WS_EX_TOOLWINDOW | WS_EX_TOPMOST;//|WS_EX_TOPMOST; cs.style=WS_POPUP; cs.style &= ~WS_CAPTION; cs.x = Org_xPos; cs.y = Org_yPos; cs.cx = SCR_Width; cs.cy = SCR_Height; cs.hMenu ...
精彩编程与编程技巧-用VB制作TopMost类型窗口 ...
Delphi实现窗口最顶层显示,这种功能相信大家见的比较多了,也就是窗口置顶、显示在最前面,不被其它的窗口遮挡,现在新版的暴风影音播放器有这种功能,在播放视频的时候,为了不被其它的窗体所遮挡,可设置播放窗口...
制作TopMost窗口 VB技术很实用的源码整理了一下本人硬盘里实用的编程资料和源码,全部是VB代码,希望大家能喜欢.
保持其他窗口最上,免费,暂时不想开源,谢谢。有20个字了吧
// 不管其他窗口是不是topmost,本例子都可以让此窗口置于最前端 HWND hForeWnd = ::GetForegroundWindow(); DWORD dwForeWndTreadId = ::GetWindowThreadProcessId(hForeWnd,NULL); DWORD dwCurWndTreandId = ...
所有窗体的最前方,以最顶层方式显示窗体,以正常方式显示窗体等功能,C#源代码this.TopMost = true;this.TopMost = false;
TopMost11,将窗口固定到最前面,一个比较实用的小工具,很久之前收藏的,一直在用,可以下载来试试,
TopMost_x64.exe
精彩编程与编程技巧-制作TopMost窗口 ...
官方最新版本 2016/10/11号发布的。文件为zip,解压后根据你安装的NotePad++版本(64或者32位),把dll文件放置在plugins目录下
本案例利用窗体的TopMost属性设置登录窗体总在最前面!
Wince6下能调出WIFI设置界面的好东西。是单独的一个EXE文件。用代码打开他就行了。代码用这个就行了。void IDD_AllSetting1::RunExe(LPTSTR filename) { SHELLEXECUTEINFO ShExecInfo = {0}; ShExecInfo.cbSize = ...
Notepad++置顶插件TopMostU(亲测-在用).zip Notepad++置顶插件TopMostU(亲测-在用).zip Notepad++置顶插件TopMostU(亲测-在用).zip
hwnd = CreateWindowEx(WS_EX_TOPMOST, szAppName, TEXT("*号查看器"), WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, ...