MFC枚举所有窗体,并向打开的窗体发送关闭消息

本文介绍如何在基于单文档的应用程序中枚举并获取窗口信息,包括窗口句柄、类、标题、风格和位置大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码:http://download.youkuaiyun.com/detail/nuptboyzhb/4162747

枚举窗体的信息

1. 新建一个基于单文档的应用程序,注意将View类的父类设置为CListView,并在PreCreateWindow函数中设置它的风格:

cs.style |= LVS_REPORT | LVS_NOSORTHEADER;//设置列表视为报表格式

2.OnInitialUpdate消息响应函数中,增加列的标题:

CListCtrl& lc = GetListCtrl();//获得列表视图的控制

lc.InsertColumn(0, _T("窗口句柄"),LVCFMT_LEFT,180);

lc.InsertColumn(1, _T("窗口类"),LVCFMT_LEFT,180,1);

lc.InsertColumn(2, _T("窗口标题"),LVCFMT_LEFT,200,1);

lc.InsertColumn(3, _T("窗口风格"),LVCFMT_LEFT,100,1);

lc.InsertColumn(4, _T("窗口位置大小(屏幕坐标)"),LVCFMT_LEFT,210,1);

3. 新增一个菜单项,点击菜单,即执行获取函数,编辑代码如下:

CListCtrl& lc = GetListCtrl();

lc.DeleteAllItems();

EnumWindows(MyEnumWindowsProc, (LPARAM)this);//遍历窗口程序

注意:第一个参数是回调函数,第二个参数是回调函数的参数;回调函数应事先声明,

4. 编写回调函数;

BOOL CALLBACK CEnumWindowsProcView::MyEnumWindowsProc(HWND hwnd,

LPARAM lParam)

{

CEnumWindowsProcView* pView = (CEnumWindowsProcView*)lParam;

CListCtrl& lc =pView->GetListCtrl();

int iItem=-1;

DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE);//获得窗体的风格

CString s;

s.Format("主窗口(%04X)",hwnd);

//窗口句柄

iItem = lc.InsertItem(lc.GetItemCount(),s);

CWnd* pWnd = CWnd::FromHandle(hwnd);

// 窗口类名

::GetClassName(hwnd, s.GetBuffer(256), 256);

int iSubitem = 1;

lc.SetItemText(iItem,iSubitem++,s);

// 窗口标题

pWnd->GetWindowText(s);

lc.SetItemText(iItem,iSubitem++,s);

CString str;

// 窗口风格

str.Format(_T("0x%x"),dwStyle);

lc.SetItemText(iItem,iSubitem++,str);

CRect rect;

::GetWindowRect(hwnd,&rect);

//窗口大小及位置

str.Format(_T("(x0=%d,y0=%d,x1=%d,y1=%d)"),rect.left,rect.top,rect.right,rect.bottom);

lc.SetItemText(iItem,iSubitem++,str);

flag++;

return TRUE;

}

向窗体发送关闭消息

主要思路,就是对枚举得到的窗口进行过滤,用SendMessage函数,发送WM_CLOSE消息;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值