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
總結
以上是生活随笔為你收集整理的MFC遍历窗体所有的控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 柴油机各缸排气温度不均匀的原因及排除方法
- 下一篇: 大众cc中央后视镜前面的塑料板怎么拆怎么