AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

在CTreeCtrl中枚举系统中的所有窗口

51自学网 2015-08-30 http://www.51zixue.net

 

BOOL CALLBACK CWinList::EnumWindowsProc(HWND hwnd, LPARAM lParam) 

WinArray.Add((unsigned long)hwnd); 
Level=1;Ignore[Level+1]=0; 
EnumChildWindows(hwnd,EnumChildProc,(long)0); 
return TRUE; 

 
void CWinList::BuiltTree(HWND hWnd) 
{ char Temp[90]; 
char Text[50]; 
char Name[20]; 
 
TreeItem.hParent=RootArray[RootPt]; 
 
::GetWindowText(hWnd,Text,50); 
::GetClassName(hWnd,Name,20); 
sprintf(Temp,"[%04x]:{%s}:%s",hWnd,Name,Text); 
TreeItem.item.pszText=Temp; 
TreeItem.item.lParam=(unsigned long)hWnd; 
HTREEITEM TempItem=m_Tree.InsertItem(&TreeItem); 
RootArray[RootPt+1]=TempItem; 

 
void CWinList::DrawFlash(HWND hWnd) 

HDC hDC; 
RECT rc; 
HPEN hPen; 
 
::GetWindowRect(hWnd, &rc); 
hDC=::GetWindowDC(hWnd); 
::SetROP2(hDC,R2_NOT); 
 
hPen=::CreatePen(PS_INSIDEFRAME,5*GetSystemMetrics(SM_CXBORDER),RGB(255,0,0))

::SelectObject(hDC,hPen); 
::SelectObject(hDC,GetStockObject(NULL_BRUSH)); 
::Rectangle(hDC,0,0,rc.right-rc.left,rc.bottom-rc.top); 
::ReleaseDC(hWnd,hDC); 
::DeleteObject(hPen); 

 
void CWinList::Refresh() 
{ RootArray[0]=TVI_ROOT; 
RootPt=0; 
 
TreeItem.hInsertAfter=TVI_LAST; 
TreeItem.item.mask=TVIF_TEXT|TVIF_PARAM; 
WinArray.RemoveAll(); 
m_Tree.SetFont(&TreeFont); 
m_Tree.DeleteAllItems(); 
Level=0; 
for(int j=0;j<10;j++) Ignore[j]=0; 
EnumWindows(EnumWindowsProc,(long)0); 
 
for(int i=0;i/td>
{ RootPt=(int)((WinArray[i]&0xFFFF0000)>>16); 
BuiltTree((HWND)(WinArray[i]&0x0000FFFF)); 


 
BOOL CWinList::OnInitDialog() 

CDialog::OnInitDialog(); 
 
// TODO: Add extra initialization here 
m_hSelected=NULL; 
hPrevWnd=NULL; 
Refresh(); 
return TRUE; // return TRUE unless you set the focus to a control 
// EXCEPTION: OCX Property Pages should return FALSE 

 
void CWinList::OnRefresh() 

// TODO: Add your control notification handler code here 
Refresh(); 

 
void CWinList::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 

NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; 
// TODO: Add your control notification handler code here 
 
HWND hWnd=(HWND)pNMTreeView->itemNew.lParam; 
m_hSelected=hWnd; 
if (hPrevWnd) DrawFlash(hPrevWnd); 
hPrevWnd=hWnd; 
DrawFlash(hWnd); 
 
*pResult = 0; 

 
BOOL CWinList::DestroyWindow() 

// TODO: Add your specialized code here and/or call the base class 
if (hPrevWnd) DrawFlash(hPrevWnd); 
return CDialog::DestroyWindow(); 

 
 
/////////////////////////////////////////////////////////////////////////////
 
// DLL Export Interface 
 
extern "C" 
HWND FAR PASCAL EXPORT SearchWindow() 

CWinList WinList; 
if (WinList.DoModal()==IDOK) 
return WinList.m_hSelected; 
else 
return (HWND)NULL; 
}

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,51zixue.net不保证资料的完整性。

上一篇:碎片图像无缝拼合技术的VC++实现  下一篇:DES算法详述