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

标签: mfccallbackreport报表文档
2381人阅读 评论(0) 收藏 举报
分类:

源代码:http://download.csdn.net/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消息;

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1385878次
    • 积分:15875
    • 等级:
    • 排名:第655名
    • 原创:267篇
    • 转载:9篇
    • 译文:1篇
    • 评论:644条
    作者简介
    Android开发联盟QQ群:

    272209595

    联系方式:
    我的新浪微博
    南邮本硕,目前就职于阿里巴巴
    最新评论