本文将给出一个源程序,实现在一个对话框中的TreeCtrl中用树的形式枚举窗口。 这是头文件 // WinList.h : header file // ///////////////////////////////////////////////////////////////////////////// // CWinList dialog class CWinList : public CDialog { // Construction public: HWND m_hSelected; CWinList(CWnd* pParent = NULL); // standard constructor static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam); static BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam); void BuiltTree(HWND hWnd); // Dialog Data //{{AFX_DATA(CWinList) enum { IDD = ID_WINLIST }; CTreeCtrl m_Tree; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CWinList) public: virtual BOOL DestroyWindow(); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: void DrawFlash(HWND hWnd); void Refresh(); // Generated message map functions //{{AFX_MSG(CWinList) virtual BOOL OnInitDialog(); afx_msg void OnRefresh(); afx_msg void OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: CFont TreeFont; TV_INSERTSTRUCT TreeItem; int RootPt; HTREEITEM RootArray[10]; }; 下面是实现文件 // WinList.cpp : implementation file // #include "stdafx.h" #include "mfc.h" #include "WinList.h" #include "mfcApi.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CWinList dialog CWinList::CWinList(CWnd* pParent /*=NULL*/) : CDialog(CWinList::IDD, pParent) { //{{AFX_DATA_INIT(CWinList) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CWinList::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CWinList) DDX_Control(pDX, IDTREE, m_Tree); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CWinList, CDialog) //{{AFX_MSG_MAP(CWinList) ON_BN_CLICKED(IDREFRESH, OnRefresh) ON_NOTIFY(TVN_SELCHANGED, IDTREE, OnSelchangedTree) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CWinList message handlers static CDWordArray WinArray; static unsigned long Level; static int Ignore[10]; static HWND hPrevWnd; BOOL CALLBACK CWinList::EnumChildProc(HWND hwnd,LPARAM lParam) { Ignore[Level]++; if (Ignore[Level+1]) Ignore[Level+1]--; else { WinArray.Add((unsigned long)((Level<<16)|(unsigned long)hwnd)); Level++;Ignore[Level+1]=0; EnumChildWindows(hwnd,EnumChildProc,(long)0); Level--; } return TRUE; } <  
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
1/2 1 2 下一页 尾页 |