MFC遍历窗体所有的控件

HWND pWnd = FindWindow(NULL,"另存为");              //获得窗口的句柄

void saveopen(HWND pWnd)
{
 HWND m_hWnd=pWnd;
 HWND hWndChild =::GetWindow(m_hWnd,GW_CHILD); 
 TCHAR BUF[512];
 CString filename;
 CWnd *pedit;
 while(hWndChild)  
 {  
  char *buf=new char[512];
  ::GetClassName(hWndChild,buf,512);//得到枚举的控件是什么类型的,
  CString str=buf;  
  str.TrimRight();
  delete buf;
  //AfxMessageBox(str);
  if(str=="ComboBoxEx32")
  {
   HWND tt =::GetWindow(hWndChild,GW_CHILD);
   HWND yy =::GetWindow(tt,GW_CHILD);
   pedit   =   CWnd::FromHandle(yy);

   pedit->SendMessage(WM_GETTEXT,sizeof(BUF)/sizeof(TCHAR),(LPARAM)(void*)BUF);
   filename=BUF;//完成第一步保存原始的文件名

   CString sPath="F:\\work";
   lstrcpy(BUF,(LPCTSTR)sPath);
   pedit->SendMessage(WM_SETTEXT,0,(LPARAM)BUF);
  }
  if(str=="Button")      //枚举到按钮,有保存和取消按钮
  {
   CWnd *pwnd = CWnd::FromHandle(hWndChild);
   pwnd->SendMessage(WM_GETTEXT,sizeof(BUF)/sizeof(TCHAR),(LPARAM)(void*)BUF);
   //发消息得到按钮的标题
   CString str=BUF;
   str.TrimRight();
   if(str=="保存(&S)")//如果是保存按钮
   {  
    ::SendMessage(pwnd->GetSafeHwnd(),WM_LBUTTONDOWN,0,0);
    ::SendMessage(pwnd->GetSafeHwnd(),WM_LBUTTONUP,0,0);
    strcpy(BUF,filename);
    pedit->SendMessage(WM_SETTEXT,0,(LPARAM)BUF);
    return;
   }
  }
  hWndChild=::GetWindow(hWndChild,GW_HWNDNEXT); 
 }
}

//messagebox输出非字符串的数据

 CString  strTmp;  
 strTmp.Format("窗口句柄=%0x",pWnd->m_hWnd);  
 AfxMessageBox(strTmp);

 

 

MFC中菜单变灰

方法1:有UpdateCmdUI句柄时

定义一个BOOL变量m_b来标志菜单项是否有效,该菜单项响应UPDATE_COMMAND_UI消息,在消息处理函数中pCmdUI->Enable(m_b);以后你根据需要来设置m_b的值,就可以使菜单是否可用。在一个函数中可以控制多个菜单

方法2:没有UpdateCmdUI句柄时

MFC中缺省的习惯是当没有UpdateCmdUI句柄时程序是使能(Enable)菜单,菜单自动变成使能,只要关掉缺省值就可以了,把下面的代码加入你的程序
CMainFrm::CMainFrm
{
// Other stuff
this->m_bAutoMenuEnable = false;
}  

然后在消息响应函数中添加如下代码:

CMenu* m_menu = GetMenu();
CMenu* submenu = m_menu->GetSubMenu(0);
submenu->EnableMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_GRAYED);

 

CFrameWnd::m_bAutoMenuEnable
//Controls automatic enable and disable functionality for menu items.
//CFrameWnd类中的BOOL型数据成员,默认为TRUE。
//如果m_bAutoMenuEnable设为TRUE,则如果某菜单项在当前命令路径中无法找到相应的命令消息控制函数,则此时应用程序框架便禁用该菜单项,并将该菜单项设为灰色。
//如果m_bAutoMenuEnable设为FALSE,便可以禁止上叙自动禁用无控制函数菜单项的特性。

易出错不推荐使用

转载于:https://www.cnblogs.com/carekee/articles/2334604.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值