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; } 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |