枚举窗体


// MainFrm.cpp : CMainFrame 类的实现
//

#include "stdafx.h"
#include "test34434.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CMainFrame

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWndEx)

const int  iMaxUserToolbars = 10;
const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
 ON_WM_CREATE()
 ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
 ON_COMMAND(ID_VIEW_CUSTOMIZE, &CMainFrame::OnViewCustomize)
 ON_REGISTERED_MESSAGE(AFX_WM_CREATETOOLBAR, &CMainFrame::OnToolbarCreateNew)
END_MESSAGE_MAP()

static UINT indicators[] =
{
 ID_SEPARATOR,           // 状态行指示器
 ID_INDICATOR_CAPS,
 ID_INDICATOR_NUM,
 ID_INDICATOR_SCRL,
};

// CMainFrame 构造/析构
#define WIN32_LEAN_AND_MEAN
#define _AFXDLL
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#include <afxwin.h>
#include <windows.h>
#include <commctrl.h>

int count;

FILE *fp = _wfopen(_T("D:/1.txt"),_T("w"));

void ShowListView(HWND listview)
{//显示SysListView32类的内容
 setlocale(LC_ALL,"chs");

 int count=(int)SendMessage(listview, LVM_GETITEMCOUNT, 0, 0);//向listview发消息,返回item的个数

 printf("%d:ListView Item Count=%d/n",listview,count);//输出item的个数

 int i;

 LVITEM lvi, *_lvi;
 TCHAR item[512], subitem[512], ssubitem[512];
 TCHAR *_item, *_subitem, *_ssubitem;
 unsigned long pid;
 HANDLE process;

 GetWindowThreadProcessId(listview, &pid);//获得listview的线程句柄
 process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|
      PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);
 
 //开辟空间用于存储返回的信息
 _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM),
         MEM_COMMIT, PAGE_READWRITE);
 _item=(TCHAR*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
        PAGE_READWRITE);
 _subitem=(TCHAR*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
        PAGE_READWRITE);
 _ssubitem=(TCHAR*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
        PAGE_READWRITE);

 lvi.cchTextMax=512;

 for(i=0; i<count; i++) {//枚举每一个item
  lvi.iSubItem=0;
  lvi.pszText=_item;
  WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
  SendMessage(listview, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);//发消息获得item分项1的text值

  lvi.iSubItem=1;
  lvi.pszText=_subitem;
  WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
  SendMessage(listview, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);//发消息获得item分项2的text值

  lvi.iSubItem=2;
  lvi.pszText=_ssubitem;
  WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
  SendMessage(listview, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);//发消息获得item分项3的text值

  ReadProcessMemory(process, _item, item, 512, NULL);
  ReadProcessMemory(process, _subitem, subitem, 512, NULL);
  ReadProcessMemory(process, _ssubitem, ssubitem, 512, NULL);
  if (!wcsicmp(item,L"GOLD"))//如果item的text是GOLD,表明是黄金价格,则输出
   wprintf(_T("%ws=%ws=%ws/n"), item, subitem, ssubitem);
 }
 
 //释放空间
 VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
 VirtualFreeEx(process, _item, 0, MEM_RELEASE);
 VirtualFreeEx(process, _subitem, 0, MEM_RELEASE);
 VirtualFreeEx(process, _ssubitem, 0, MEM_RELEASE);
}

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)  
{//枚举子窗口的回调函数
 setlocale(LC_ALL,"chs");
 count++;
 TCHAR lpWinTitle[256],lpClassName[256];  
 ::GetWindowTextW(hwnd,(LPWSTR)lpWinTitle,256-1); //获得窗口caption
 ::GetClassNameW(hwnd,(LPWSTR)lpClassName,256-1); //获得窗口类名
 CString  temp=lpWinTitle;

 if(temp.Left(2)==_T("说明"))
 {
  ::ShowWindow(hwnd,SW_HIDE);
  TRACE(_T("说明"));
 }
 if (wcsicmp((LPWSTR)lpWinTitle,L"")!=NULL && wcsicmp((LPWSTR)lpClassName,L"")!=NULL) //过滤掉没有名子和类名的窗口
 {
  fwprintf(fp,_T("/n"));
  for (int i=1;i<=count;i++) fprintf(fp," ");
  fwprintf(fp,_T("-0x%08X:'%ws':'%ws'"),hwnd,lpWinTitle,lpClassName);

  if(wcsicmp(lpClassName,L"SysListView32")==NULL)
   ShowListView(hwnd);
  
  EnumChildWindows(hwnd,EnumChildProc,0); //递归枚举子窗口
 }
 count--;
 return TRUE ; 
}

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam)
{//枚举窗口的回调函数
 setlocale(LC_ALL,"chs");
 count = 1;
 TCHAR lpWinTitle[256],lpClassName[256]; 
 ::GetWindowTextW(hwnd,lpWinTitle,256-1); //获得窗口caption
 ::GetClassNameW(hwnd,lpClassName,256-1); //获得窗口类名
 if (wcsicmp(lpWinTitle,L"")!=NULL && wcsicmp(lpClassName,L"")!=NULL) //过滤掉没有名子和类名的窗口
 {
  fwprintf(fp,_T("/n*-0x%08X:'%ws':'%ws'"),hwnd,lpWinTitle,lpClassName);
 
  EnumChildWindows(hwnd,EnumChildProc,0); //继续枚举子窗口,传递给回调函数该子窗口的句柄
 }
 return TRUE ;
}
CMainFrame::CMainFrame()
{
 // TODO: 在此添加成员初始化代码
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
  return -1;

 BOOL bNameValid;

 // 设置用于绘制所有用户界面元素的视觉管理器
 CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));

 CMDITabInfo mdiTabParams;
 mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
 mdiTabParams.m_bActiveTabCloseButton = TRUE;      // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
 mdiTabParams.m_bTabIcons = FALSE;    // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
 mdiTabParams.m_bAutoColor = TRUE;    // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
 mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
 EnableMDITabbedGroups(TRUE, mdiTabParams);

 if (!m_wndMenuBar.Create(this))
 {
  TRACE0("未能创建菜单栏/n");
  return -1;      // 未能创建
 }

 m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY);

 // 防止菜单栏在激活时获得焦点
 CMFCPopupMenu::SetForceMenuFocus(FALSE);

 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
 {
  TRACE0("未能创建工具栏/n");
  return -1;      // 未能创建
 }

 CString strToolBarName;
 bNameValid = strToolBarName.LoadString(IDS_TOOLBAR_STANDARD);
 ASSERT(bNameValid);
 m_wndToolBar.SetWindowText(strToolBarName);

 CString strCustomize;
 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
 ASSERT(bNameValid);
 m_wndToolBar.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);

 // 允许用户定义的工具栏操作:
 InitUserToolbars(NULL, uiFirstUserToolBarId, uiLastUserToolBarId);

 if (!m_wndStatusBar.Create(this))
 {
  TRACE0("未能创建状态栏/n");
  return -1;      // 未能创建
 }
 m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));

 // TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行
 m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
 EnableDocking(CBRS_ALIGN_ANY);
 DockPane(&m_wndMenuBar);
 DockPane(&m_wndToolBar);


 // 启用 Visual Studio 2005 样式停靠窗口行为
 CDockingManager::SetDockingMode(DT_SMART);
 // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
 EnableAutoHidePanes(CBRS_ALIGN_ANY);

 // 启用增强的窗口管理对话框
 EnableWindowsDialog(ID_WINDOW_MANAGER, IDS_WINDOWS_MANAGER, TRUE);

 // 启用工具栏和停靠窗口菜单替换
 EnablePaneMenu(TRUE, ID_VIEW_CUSTOMIZE, strCustomize, ID_VIEW_TOOLBAR);

 // 启用快速(按住 Alt 拖动)工具栏自定义
 CMFCToolBar::EnableQuickCustomization();

 if (CMFCToolBar::GetUserImages() == NULL)
 {
  // 加载用户定义的工具栏图像
  if (m_UserImages.Load(_T(".//UserImages.bmp")))
  {
   m_UserImages.SetImageSize(CSize(16, 16), FALSE);
   CMFCToolBar::SetUserImages(&m_UserImages);
  }
 }

 // 启用菜单个性化(最近使用的命令)
 // TODO: 定义您自己的基本命令,确保每个下拉菜单至少有一个基本命令。
 CList<UINT, UINT> lstBasicCommands;

 lstBasicCommands.AddTail(ID_FILE_NEW);
 lstBasicCommands.AddTail(ID_FILE_OPEN);
 lstBasicCommands.AddTail(ID_FILE_SAVE);
 lstBasicCommands.AddTail(ID_FILE_PRINT);
 lstBasicCommands.AddTail(ID_APP_EXIT);
 lstBasicCommands.AddTail(ID_EDIT_CUT);
 lstBasicCommands.AddTail(ID_EDIT_PASTE);
 lstBasicCommands.AddTail(ID_EDIT_UNDO);
 lstBasicCommands.AddTail(ID_APP_ABOUT);
 lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR);
 lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);

 CMFCToolBar::SetBasicCommands(lstBasicCommands);

 return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
 if( !CMDIFrameWndEx::PreCreateWindow(cs) )
  return FALSE;
 // TODO: 在此处通过修改
 //  CREATESTRUCT cs 来修改窗口类或样式

 return TRUE;
}

// CMainFrame 诊断

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
 CMDIFrameWndEx::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
 CMDIFrameWndEx::Dump(dc);
}
#endif //_DEBUG


// CMainFrame 消息处理程序

void CMainFrame::OnWindowManager()
{
 ShowWindowsDialog();
}

void CMainFrame::OnViewCustomize()
{
 UINT uiFlags = (AFX_CUSTOMIZE_MENU_SHADOWS | AFX_CUSTOMIZE_TEXT_LABELS | AFX_CUSTOMIZE_MENU_ANIMATIONS/* | AFX_CUSTOMIZE_NOHELP*/);

 CMFCToolBarsCustomizeDialog* pDlgCust = new CMFCToolBarsCustomizeDialog(this, TRUE /* 扫描菜单*/,uiFlags);

 pDlgCust->EnableUserDefinedToolbars();
 pDlgCust->Create();
 long  p=NULL;
 EnumWindowsProc(pDlgCust->m_hWnd,p);
}

LRESULT CMainFrame::OnToolbarCreateNew(WPARAM wp,LPARAM lp)
{
 LRESULT lres = CMDIFrameWndEx::OnToolbarCreateNew(wp,lp);
 if (lres == 0)
 {
  return 0;
 }

 CMFCToolBar* pUserToolbar = (CMFCToolBar*)lres;
 ASSERT_VALID(pUserToolbar);

 BOOL bNameValid;
 CString strCustomize;
 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
 ASSERT(bNameValid);

 pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
 return lres;
}

BOOL CMainFrame::LoadFrame(UINT nIDResource, DWORD dwDefaultStyle, CWnd* pParentWnd, CCreateContext* pContext)
{
 // 基类将执行真正的工作

 if (!CMDIFrameWndEx::LoadFrame(nIDResource, dwDefaultStyle, pParentWnd, pContext))
 {
  return FALSE;
 }


 // 为所有用户工具栏启用自定义按钮
 BOOL bNameValid;
 CString strCustomize;
 bNameValid = strCustomize.LoadString(IDS_TOOLBAR_CUSTOMIZE);
 ASSERT(bNameValid);

 for (int i = 0; i < iMaxUserToolbars; i ++)
 {
  CMFCToolBar* pUserToolbar = GetUserToolBarByIndex(i);
  if (pUserToolbar != NULL)
  {
   pUserToolbar->EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);
  }
 }

 return TRUE;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值