在MFC中,可以通过App查找MainFrame,但对于BaseDialog的程序,如何查找主窗口呢?请各位大虾赐教.

解决方案 »

  1.   

    如果你知道你主窗口的名字你可以用FindWindow(
    CWnd *pWnd=::FindWindow(NULL,"豬窗口Title")
    if(pWnd=NULL)
    {
      //沒有找到
    }
      

  2.   

    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); 

      

  3.   

    寻找当前正在运行的所有程序的窗口
    实现ShowDesktop功能的基础是找出当前正在运行的所有程序的窗口。实现该功能有多
    种方法,可以调用FindWindow和FindWindowEx来实现,也可使用GetWindow来实现。笔
    者在ShowDesktop中采用了后者,其调用方式如下程序片段所示:
    CWnd *pWnd = GetWindow(GW_HWNDFIRST);
    while (pWnd != NULL)
    {
    // 处理代码
    // .................
    pWnd = pWnd->GetWindow(GW_HWNDNEXT);
    }
      

  4.   

    FindWindow函数能寻找正运行着的窗口,但该函 
    数要求指明所寻找窗口的标题或窗口类名,
      

  5.   

    基于Dialog的MFC程序也可以用AfxGetApp()->GetMainWnd()阿,然后强制转换成CDialog的指针就可以了。注:在基于Dialog的MFC程序的CWinApp::InitInsance中有:
    CXXXXDlg dlg;
    m_pMainWnd = &dlg;
      

  6.   

    如果是自己写的程序中的主窗口,一般说来是可以直接用AfxGetMainWnd()得到主窗口指针的,具体是哪个,要看你在app中给m_pMainWnd付的什么值,不过你要用你自己定义的函数或者变量,需要强行转换一下比如(CMyDialog*)AfxGetMainWnd()。如果你查询的是其他程序,可以通过EnumWindows()来得到,具体用法参见msdn。
      

  7.   

    CWS27Dlg是我的主对话框,下面取得它的指针。
    CWS27Dlg *pp=(CWS27Dlg *)AfxGetApp()->m_pMainWnd;
      

  8.   

    连CWnd *pWnd = ::FindWindow(...)的等式都出来了,好笑。HWND FindWindow(
      LPCTSTR lpClassName,  // class name
      LPCTSTR lpWindowName  // window name
    );
    什么时候返回值变成了CWnd *
      

  9.   

    赫赫..不好意思..確實寫錯了.
    CWnd *pWnd=FindWindow(NULL,"豬窗口Title")
    if(pWnd=NULL)
    {
      //沒有找到
    }
      

  10.   

    这个问题我也曾经考虑过,大家如果可以的话也谈谈如何使用FindWindow第一个参数,即class的定制!