如何寻找Dialog? 在MFC中,可以通过App查找MainFrame,但对于BaseDialog的程序,如何查找主窗口呢?请各位大虾赐教. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你知道你主窗口的名字你可以用FindWindow(CWnd *pWnd=::FindWindow(NULL,"豬窗口Title")if(pWnd=NULL){ //沒有找到} OnSendComm1() { CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd->SendMessage(WM_COMM,0,0); } OnSendComm2() { CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd->SendMessage(WM_COMM,0,1); } OnSendComm3() { CString str="Receiver"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) pWnd->SendMessage(WM_COMM,1,0); } 寻找当前正在运行的所有程序的窗口实现ShowDesktop功能的基础是找出当前正在运行的所有程序的窗口。实现该功能有多种方法,可以调用FindWindow和FindWindowEx来实现,也可使用GetWindow来实现。笔者在ShowDesktop中采用了后者,其调用方式如下程序片段所示:CWnd *pWnd = GetWindow(GW_HWNDFIRST);while (pWnd != NULL){// 处理代码// .................pWnd = pWnd->GetWindow(GW_HWNDNEXT);} FindWindow函数能寻找正运行着的窗口,但该函 数要求指明所寻找窗口的标题或窗口类名, 基于Dialog的MFC程序也可以用AfxGetApp()->GetMainWnd()阿,然后强制转换成CDialog的指针就可以了。注:在基于Dialog的MFC程序的CWinApp::InitInsance中有:CXXXXDlg dlg;m_pMainWnd = &dlg; 如果是自己写的程序中的主窗口,一般说来是可以直接用AfxGetMainWnd()得到主窗口指针的,具体是哪个,要看你在app中给m_pMainWnd付的什么值,不过你要用你自己定义的函数或者变量,需要强行转换一下比如(CMyDialog*)AfxGetMainWnd()。如果你查询的是其他程序,可以通过EnumWindows()来得到,具体用法参见msdn。 CWS27Dlg是我的主对话框,下面取得它的指针。CWS27Dlg *pp=(CWS27Dlg *)AfxGetApp()->m_pMainWnd; 连CWnd *pWnd = ::FindWindow(...)的等式都出来了,好笑。HWND FindWindow( LPCTSTR lpClassName, // class name LPCTSTR lpWindowName // window name);什么时候返回值变成了CWnd * 赫赫..不好意思..確實寫錯了.CWnd *pWnd=FindWindow(NULL,"豬窗口Title")if(pWnd=NULL){ //沒有找到} 这个问题我也曾经考虑过,大家如果可以的话也谈谈如何使用FindWindow第一个参数,即class的定制! 如何使CListCtrl的背景变成透明? 求QQ群(关于平面设计的) 奉献20分 怎么判断界面上一个点 是不是在rct范围里面 StartDoc的问题 关于LoadBitmap()的问题? 求助:CEx03aView::OnDraw()函数是怎么被调用的? 使用SendMessageToDescendants向子窗口发送消息 急!direct3d 拾取问题 oledb 问题。 各位高手大哥,希望给小弟一点意见!!! 如何自动关闭所有运行着的IE程序? 如何用接口编程的方法修改CHtmlView浏览器内FRAME 子框架的编辑框的值!
CWnd *pWnd=::FindWindow(NULL,"豬窗口Title")
if(pWnd=NULL)
{
//沒有找到
}
{
CString str="Receiver";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,0,0);
}
OnSendComm2()
{
CString str="Receiver";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,0,1);
}
OnSendComm3()
{
CString str="Receiver";
CWnd *pWnd=CWnd::FindWindow(NULL,str);
if(pWnd)
pWnd->SendMessage(WM_COMM,1,0);
}
实现ShowDesktop功能的基础是找出当前正在运行的所有程序的窗口。实现该功能有多
种方法,可以调用FindWindow和FindWindowEx来实现,也可使用GetWindow来实现。笔
者在ShowDesktop中采用了后者,其调用方式如下程序片段所示:
CWnd *pWnd = GetWindow(GW_HWNDFIRST);
while (pWnd != NULL)
{
// 处理代码
// .................
pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}
数要求指明所寻找窗口的标题或窗口类名,
CXXXXDlg dlg;
m_pMainWnd = &dlg;
CWS27Dlg *pp=(CWS27Dlg *)AfxGetApp()->m_pMainWnd;
LPCTSTR lpClassName, // class name
LPCTSTR lpWindowName // window name
);
什么时候返回值变成了CWnd *
CWnd *pWnd=FindWindow(NULL,"豬窗口Title")
if(pWnd=NULL)
{
//沒有找到
}