工控编程吧
标题:
对桌面窗口显示隐藏操作--上位机VC
[打印本页]
作者:
qq263946146
时间:
2016-12-12 19:51
标题:
对桌面窗口显示隐藏操作--上位机VC
(, 下载次数: 4)
上传
点击文件名下载附件
对桌面窗口显示隐藏操作--上位机VC
效果展示
同时打开多个窗口时,有时仅想显示一个窗口,就得对其他窗口进行暂时隐藏的操作,当前例程实现这一功能,效果如图,程序运行时会列表当前桌面打开的可见窗口,也可点击<刷新窗口>重新检查打开窗口个数,选择列出的窗口名就可以进行显示及隐藏操作;
要点提示
全部窗口的迭代搜索可以使用函数EnumWindows()实现,该函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数。回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。 函数原型 BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAMlParam); 参数: lpEnumFunc:指向一个应用程序定义的回调函数指针,请参看EnumWindowsProc。 lPararm:指定一个传递给回调函数的应用程序定义值。回调函数原型 BOOL CALLBACK EnumWindowsP(),
在回调函数中我们用一个动态数组类Crray保存枚举得到的全部窗口,后续就可对这些得到的窗口进行显示与隐藏操作;
实现功能
1.新建基于对话框的应用程序
2.拖拽一列表框控件关联变量CListBox m_list;添加按钮<隐藏选中窗口><显示窗口><刷新窗口>关联按钮的点击函数
void CGkbc8Dlg::OnButton1()
{
//获取可见窗口时数组索引已与列表框索引对应
int nNum = g_array.GetSize();
for(int i = 0;i <nNum;i++)
{
int tmp = m_list.GetSel(i);
if(tmp == 0)
continue;
::ShowWindow(g_array.GetAt(i),FALSE);
}
}
void CGkbc8Dlg::OnButton3()
{
m_list.ResetContent();
g_array.RemoveAll();
CString sText;
char cWndTitle[_MAX_PATH];
char cClassName[_MAX_PATH];
::EnumWindows(EnumWindowsProc,NULL);
int nNum = g_array.GetSize();
for(int i = 0;i <nNum;i++)
{
HWND hWnd = g_array.GetAt(i);
::GetWindowText(hWnd,cWndTitle,_MAX_PATH);
::GetClassName(hWnd,cClassName,MAX_PATH);
sText.Format("索引:%d 标题名:%s, 类名:%s",i,cWndTitle,cClassName);
m_list.AddString(sText);
}
}
复制代码
void CGkbc8Dlg::OnButton2()
{
int nNum = g_array.GetSize();
for(int i = 0;i <nNum;i++)
{
int tmp = m_list.GetSel(i);
if(tmp == 0)
continue;
::ShowWindow(g_array.GetAt(i),TRUE);
}
}
复制代码
3.添加回调函数
#include <afxtempl.h>
CArray<HWND,HWND> g_array;
BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam)
{
if(::GetWindowLong(hWnd,GWL_STYLE)& WS_VISIBLE)
{
g_array.Add(hWnd);
}
return 1;
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/c1053ab26eb97e4b7927ad0296ff8ff8/0/0/w_19rukjkd9x.swf-albumId=6966379609-tvId=6966379609-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[weixinlianxi]1[/weixinlianxi]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4