請問如何在自訂的class不是繼承自MFC的
去呼叫另一個繼承自MFC CDialog的對話盒裡的一個public 成員函式,TrayMessage()
我嘗試使用如下,但在執行時期就出錯了(theApp.hLoDlg是該對話盒的HWND)
CWnd* wnd;
wnd->Attach(theApp.hLoDlg);
((CLoDlg*)wnd)->TrayMessage (theApp.hLoDlg , NIM_DELETE , 0, 0, APP_NAME);

解决方案 »

  1.   

    获取指针就行了,方法很多种,列举一种:
    HWND hDlg = ::FindWindow(NULL,"dlg标题");
    CxxxDlg *pDlg = (CxxxDlg *)CWnd::FromHandle(hDlg);
    pDlg->....
      

  2.   

    或者直接
    CxxxDlg *pDlg = (CxxxDlg *)CWnd::FindWindow(NULL,"caption");
      

  3.   

    ((CLoDlg*)CWnd::FromHandle(theApp.hLoDlg))->TrayMessage (theApp.hLoDlg , NIM_DELETE , 0, 0, APP_NAME);Attach這個東西只能被一個CWnd Attach到,如果超過一個,就會彈出錯誤。同一個程式裏面還是不要用FindWindow的好。一般來説,如果有任意一個HOBJECT,大都是用FromHandle去取MFC的類對象的