MDI环境下枚举所有打开的窗口
来源:互联网 发布:变换发型的软件 编辑:程序博客网 时间:2024/05/29 15:23
In MFC, each CMDIChildWnd created by the framework is managed as a child window of the MDIClient window. This MDIClient window is a child of the mainframe window and fills its client area. For MDI applications, the mainframe window is encapsulated by the CMDIFrameWnd class. This class has a public embedded HWND member (m_hWndMDIClient), which is the handle to the MDIClient window. For MDI applications, AppWizard derives the CMainFrame class from CMDIFrameWnd.
The MDIClient maintains an internal list of child windows. In an MFC application, these child windows are either a CMDIChildWnd object or an internal window used to display the title of an iconized window. Note that this is an internal list controlled by Windows; don't make assumptions about the ordering of children in the list after an API function is called.
//**mainfrm.h****************
class CMainFrame : public CMDIFrameWnd
{
...
public :
CWnd m_wndMDIClient;
CWnd* m_pWndCurrentChild;
CMDIChildWnd* GetNextMDIChildWnd();
int GetCountCMDIChildWnds();
...
}
//**mainfrm.cpp**************
CMainFrame::CMainFrame(): m_pWndCurrentChild(NULL)
{
//.................
}
CMainFrame::~CMainFrame()
{
m_wndMDIClient.Detach();
//.................
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (m_wndMDIClient.Attach(m_hWndMDIClient) == 0)
{
TRACE0("Failed to attach MDIClient./n" );
return -1; // fail to create
}
//.................
}
//----------------------------------------------------------------
// This function finds the CMDIChildWnd in the list of windows
// maintained by the application's MDIClient window following the
// one pointed to by the member variable m_pWndCurrentChild. If no
// further CMDIChildWnds are in the list, NULL is returned.
//----------------------------------------------------------------
CMDIChildWnd* CMainFrame::GetNextMDIChildWnd()
{
if (!m_pWndCurrentChild)
{
// Get the first child window.
m_pWndCurrentChild = m_wndMDIClient.GetWindow(GW_CHILD);
}
else
{
// Get the next child window in the list.
m_pWndCurrentChild =
(CMDIChildWnd*)m_pWndCurrentChild->GetWindow(GW_HWNDNEXT);
}
if (!m_pWndCurrentChild)
{
// No child windows exist in the MDIClient,
// or you are at the end of the list. This check
// will terminate any recursion.
return NULL;
}
// Check the kind of window
if (!m_pWndCurrentChild->GetWindow(GW_OWNER))
{
if (m_pWndCurrentChild->
IsKindOf(RUNTIME_CLASS(CMDIChildWnd)))
{
// CMDIChildWnd or a derived class.
return (CMDIChildWnd*)m_pWndCurrentChild;
}
else
{
// Window is foreign to the MFC framework.
// Check the next window in the list recursively.
return GetNextMDIChildWnd();
}
}
else
{
// Title window associated with an iconized child window.
// Recurse over the window manager's list of windows.
return GetNextMDIChildWnd();
}
}
//-----------------------------------------------------------------
// This function counts the number of CMDIChildWnd objects
// currently maintained by the MDIClient.
//-----------------------------------------------------------------
int CMainFrame::GetCountCMDIChildWnds()
{
int count = 0;
CMDIChildWnd* pChild = GetNextMDIChildWnd();
while (pChild)
{
count++;
pChild = GetNextMDIChildWnd();
}
return count;
}
- MDI环境下枚举所有打开的窗口
- 枚举当前打开的所有窗口
- 枚举当前打开的所有窗口
- VC++MFC 枚举当前打开的所有窗口
- 枚举当前环境中打开的所有IE
- 管理MDI窗口,解决繁琐的打开窗口的问题
- Winform避免相同MDI子窗口重复打开的方法
- DELPHI中MDI子窗口的关闭 和打开
- C# 实现MDI子窗体只打开一个(打开新的窗口,关闭其他窗口)
- easyUI 环境下,关闭打开的窗口的方法
- MDI窗口的笔记
- MDI窗口的笔记
- EnumThreadWindows枚举线程的所有窗口
- EnumThreadWindows枚举线程的所有窗口
- 枚举所有打开的Office文件路径
- 枚举当前打开的程序窗口
- 在MDI方式下自由生成自定义的子窗口
- 在MDI方式下自由生成自定义的子窗口
- find 忽略大小写查找文件
- Jenkins REST API 使用指北
- UIViewAnimationOptions类型与modalTransitionStyle模态样式
- Android7.0 IMS(1)开机初始化
- Docker pull 使用代理
- MDI环境下枚举所有打开的窗口
- K近邻---Python---机器学习
- js代码加载外部css和js文件
- android Drawable setbounds()介绍
- selenium 获得页面cookie信息
- js基础:数组基础和数组方法的各种使用
- 【Android】AndroidStudio导入别人的项目报错。编译通过,无法运行解决方案
- Laravel Eloquent ORM--整理
- php error_log 函数的使用