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);
???//發(fā)消息得到按鈕的標(biāo)題
???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輸出非字符串的數(shù)據(jù)
?CString? strTmp;??
?strTmp.Format("窗口句柄=%0x",pWnd->m_hWnd);??
?AfxMessageBox(strTmp);
?
?
MFC中菜單變灰
方法1:有UpdateCmdUI句柄時(shí)
定義一個(gè)BOOL變量m_b來(lái)標(biāo)志菜單項(xiàng)是否有效,該菜單項(xiàng)響應(yīng)UPDATE_COMMAND_UI消息,在消息處理函數(shù)中pCmdUI->Enable(m_b);以后你根據(jù)需要來(lái)設(shè)置m_b的值,就可以使菜單是否可用。在一個(gè)函數(shù)中可以控制多個(gè)菜單
方法2:沒(méi)有UpdateCmdUI句柄時(shí)
MFC中缺省的習(xí)慣是當(dāng)沒(méi)有UpdateCmdUI句柄時(shí)程序是使能(Enable)菜單,菜單自動(dòng)變成使能,只要關(guān)掉缺省值就可以了,把下面的代碼加入你的程序
CMainFrm::CMainFrm
{
// Other stuff
this->m_bAutoMenuEnable = false;
}??
然后在消息響應(yīng)函數(shù)中添加如下代碼:
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型數(shù)據(jù)成員,默認(rèn)為T(mén)RUE。
//如果m_bAutoMenuEnable設(shè)為T(mén)RUE,則如果某菜單項(xiàng)在當(dāng)前命令路徑中無(wú)法找到相應(yīng)的命令消息控制函數(shù),則此時(shí)應(yīng)用程序框架便禁用該菜單項(xiàng),并將該菜單項(xiàng)設(shè)為灰色。
//如果m_bAutoMenuEnable設(shè)為FALSE,便可以禁止上敘自動(dòng)禁用無(wú)控制函數(shù)菜單項(xiàng)的特性。
易出錯(cuò)不推薦使用
轉(zhuǎn)載于:https://www.cnblogs.com/carekee/articles/2334604.html
總結(jié)
以上是生活随笔為你收集整理的MFC遍历窗体所有的控件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 柴油机各缸排气温度不均匀的原因及排除方法
- 下一篇: 大众cc中央后视镜前面的塑料板怎么拆怎么