对桌面窗口显示隐藏操作--上位机VC
对桌面窗口显示隐藏操作--上位机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;
- }
复制代码我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|