CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

有没有EnumChildWindows的例子啊

楼主glacierking(一城)2004-05-01 23:01:10 在 VC/MFC / 界面 提问

有没有EnumChildWindows的例子啊  
  得到了一个窗体的句柄,怎么才能看这个窗体的类名?  
  问题点数:0、回复次数:11Top

1 楼GameWeaverDummy(小白菜)回复于 2004-05-01 23:42:02 得分 0

upTop

2 楼nik_Amis(...)回复于 2004-05-01 23:50:15 得分 0

upTop

3 楼sgnaw(李逍遥)回复于 2004-05-02 00:07:16 得分 0

例如,窗口上有一个   IDC_LIST1   的   Lixt   Box   ,那么   EnumWindowsProc   和   OK   按钮的代码如下:  
  BOOL   CALLBACK   EnumWindowsProc(HWND   hwnd,LPARAM   lParam)  
  {  
      CListBox   *   list=(CListBox   *)lParam;  
      char   buf[256];  
      CString   sstt;  
      GetWindowText(hwnd,buf,256);  
      if(strlen(buf))  
      {  
          //   插入所有窗口名称  
          int   idx=list->AddString(buf);  
   
          sstt   =   buf;  
          //   过滤得到想要的  
          if(sstt.Compare("你的窗口名称")   ==   0)  
          {  
            //   do   something...  
          }  
   
      }  
      return   TRUE;  
  }  
   
  void   CListDlg::OnOK()    
  {  
      CListBox   *   list=(CListBox   *)GetDlgItem(IDC_LIST1);  
      list->ResetContent();  
      FARPROC   EnumProcInstance=MakeProcInstance(  
      (FARPROC)EnumWindowsProc,AfxGetInstanceHandle());  
      EnumWindows((WNDENUMPROC)EnumProcInstance,(LPARAM)list);  
      FreeProcInstance(EnumProcInstance);  
      UpdateData();  
  }Top

4 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2004-05-02 00:43:13 得分 0

http://tech.99soft.net/h/2002-8-5/103857.htm  
   
  .窗口及子窗口枚举    
  UINT   ThreadProc(LPVOID   *pPraram)    
  {    
  while(1){   while(!EnumWindows((WNDENUMPROC)EnumWindowsProc,NULL))break;}    
  return   0;    
  }    
   
  BOOL   CALLBACK   EnumWindowsProc(HWND   hwnd,LPARAM   lParam)    
  {    
  char   lpWinTitle[MAX_LINELENGTH];    
  ::GetWindowText(hwnd,lpWinTitle,MAX_LINELENGTH-1);    
  if(strcmp(lpWinTitle,sTitle)==0)//   sTitle:网络登录窗口的窗口名    
  {   gMutex.Lock(INFINITE);//防止两个线程同时操作    
  while(EnumChildWindows(hwnd,(WNDENUMPROC)EnumChildProc,NULL));    
  gMutex.Unlock();    
  return   FALSE;    
  }    
  return   TRUE;    
  }    
  BOOL   CALLBACK   EnumChildProc(   HWND   hwnd,LPARAM   lParam)    
  {    
  char   sChildName[MAX_LINELENGTH];    
  ::GetClassName(hwnd,sChildName,MAX_LINELENGTH-1);    
  file://处理编辑控件,登录窗口中一般只有两个编辑框,可用MicroSoft   Spy++查看窗口的    
  file://各个子窗口    
  //   的属性。通过对比各控件的风格或名字来区别各控件。    
  if(strcmp(sChildName,"Edit")==0)    
  {    
  DWORD   dWinSty=::GetWindowLong(hwnd,GWL_STYLE);    
  if((dWinSty&ES_PASSWORD)==ES_PASSWORD)//这是密码输入编辑控件    
  {    
  gEventNextPass.SetEvent();//发送“新密码”事件    
  WaitForSingleObject(gEventPassOk,   INFINITE);   file://等待“密码完成”事件    
  gEventPassOk.ResetEvent();   file://复位    
  ::SetDlgItemText(::GetWindowLong(hwnd,GWL_ID),cCurrentPass);    
  file://把新密码填到密码输入框,也可用SetWindowText()    
  bPass=TRUE;//记录密码已填入    
  if(bUser&&(hOk!=NULL))//如果用户名已填入,“确定”按钮已找到。    
  {    
  ::SendMessage(::GetParent(hOk),WM_COMMAND,    
  (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));    
  file://向“确定”按钮送消息,参照ClassWizard的消息映射    
  bUser=FALSE;bPass=FALSE;hOk=NULL;    
  file://完成一次登录,初始化    
  return   FALSE;    
  }    
  return   TRUE;    
  }    
  file://非此即彼,这是用户名输入编辑控件    
  if((dWinSty&ES_READONLY)!=ES_READONLY)    
  {    
  ::SetDlgItemText(::GetWindowLong(hwnd,GWL_ID),cCurrentPass);    
  file://把新用户名填到用户名输入框,也可用SetWindowText()    
  bUser=TRUE;//   新用户名已填入用户名输入框    
  if(bPass&&(hOk!=NULL))   如果密码已填入,“确定”按钮已找到。    
  {    
  ::SendMessage(::GetParent(hOk),WM_COMMAND,    
  (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));    
  file://向“确定”按钮送消息,参照ClassWizard的消息映射    
  bUser=FALSE;bPass=FALSE;hOk=NULL;    
  file://完成一次登录,初始化    
  return   FALSE;    
  }    
  }    
  return   TRUE;    
  }    
  file://如果是按钮控件    
  if(strcmp(sChildName,"Button")==0)    
  {    
  char   sChildTitle[MAX_LINELENGTH];    
  ::GetWindowText(hwnd,sChildTitle,MAX_LINELENGTH-1);    
  if(strcmp(sChildTitle,sButtonOk)!=0)   return   TRUE;    
  //   sButtonOk:登录窗口中“OK”按钮的标题    
  hOk=hwnd;//记录“OK”窗口句柄    
  if(bUser&&bPass)    
  {    
  ::SendMessage(::GetParent(hOk),WM_COMMAND,    
  (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));    
  file://向“确定”按钮送消息,参照ClassWizard的消息映射    
  bUser=FALSE;bPass=FALSE;hOk=NULL;    
  file://完成一次登录,初始化    
  return   FALSE;    
  }    
  return   TRUE;    
  }    
  return   TRUE;    
  }Top

5 楼yujia120(永不停息)回复于 2004-05-02 01:42:52 得分 0

http://www.freevbcode.com/source/inifiletotreeview.zipTop

6 楼yujia120(永不停息)回复于 2004-05-02 01:44:44 得分 0

http://www.yesky.com/SoftChannel/72342371928702976/20040322/1779597_1.shtmlTop

7 楼kuangjingbo(正在学习windows)回复于 2004-05-02 16:10:09 得分 0

GetWindowLongTop

8 楼swordbroken(断剑书生)回复于 2004-05-02 16:20:41 得分 0

Try   to   learn   everything   from   MSDN   by   yourself,   then   you'll   be   a   expert.Top

9 楼c4313848(从自己做起,让抵制日货成为一种时尚,成为一种潮流)回复于 2004-08-13 16:35:42 得分 0

upTop

10 楼bager(柏哥)回复于 2004-08-13 17:25:24 得分 0

按Win+R快捷键启动“运行”程序(仅做示范),调用下述Test函数,将依次枚举其子窗体。  
  BOOL   CALLBACK   EnumChildProc(HWND   hwndChild,   LPARAM   lParam)    
  {  
  TCHAR   szWndTitle[1024];  
  int   nLen   =   GetWindowText(hwndChild,   szWndTitle,   1024);    
  if   (nLen)  
  {  
  AfxMessageBox(szWndTitle);  
  CString   strCancel("取消");  
  if   (strCancel.CollateNoCase(szWndTitle)   ==0)  
  {  
  return   FALSE;//终止枚举。  
  }  
   
  }  
  return   TRUE;  
  }  
   
  void   Test()    
  {  
  CString     strWindowName ="运行";  
  HWND hNMMainWnd=   FindWindowEx(NULL,NULL,NULL,strWindowName);  
  if   (IsWindow(hNMMainWnd))  
  {  
  EnumChildWindows(hNMMainWnd,EnumChildProc,NULL);  
  }  
  }Top

11 楼riguiluo(落日归)回复于 2004-08-14 09:51:39 得分 0

dialog里面实现  
  #define   GetWindowStyle(hwnd)     ((DWORD)GetWindowLong(hwnd,   GWL_STYLE))  
  BOOL   CALLBACK   EnumChildProc(   HWND   hwnd,LPARAM   lParam   )  
  {  
  char   classname[200];  
  CMyDlg   *dlg   =   (CMyDlg   *)lParam;  
  DWORD   style;  
   
  GetClassName(   hwnd,   classname,   200   );  
  style   =   GetWindowStyle(   hwnd   );  
  if   (   strcmp(   classname,   "Button"   )   ==   0   )  
  {  
  style   =   (UINT)GetWindowLong(hwnd,   GWL_STYLE)   &   0xff;  
  if   (   style   ==   BS_PUSHBUTTON   ||   style   ==   BS_DEFPUSHBUTTON   )  
                                                    ........  
  }  
                    else   if...........  
  return   TRUE;  
  }  
  Top

相关问题

  • ReadProcessMemory()怎么用?有没有例子?
  • 有没有JSP读文件的例子?
  • Oracle有没有例子数据库????
  • 有没有游戏外挂的例子???
  • 有没有IE控件使用例子?
  • 有没有数据库的例子最好有源代码
  • to x86:有没有运行过Oracle的例子——hotel reservation system(SOS)
  • 有没有比较好的pb代码例子下载网站
  • borland的竹叶上有没有编程的例子下载?
  • 请问 zlib 怎么用,有没有比较完整的例子

关键词

  • 密码
  • 控件
  • 映射
  • 用户
  • hok
  • bpass
  • buser
  • getwindowlong
  • szwndtitle
  • enumchildwindows

得分解答快速导航

  • 帖主:glacierking

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo