不能用afxgetmainWnd()或afxGetApp->m_pMainWnd,这样得到的窗口不一定是主线程窗口。
谁有好的方法啊?先谢了!

解决方案 »

  1.   

    因为有其它原因,我不想传递指针,我想直接用API能获得当前任务的主线程么?
      

  2.   

    我现在用broadcastsystemmessage也可以向主窗口发送消息,不过这种方法实现始终不太好,如果能直接通过API或其它函数得到主线程窗口的句柄就好了。
      

  3.   

    这种方法我试过了,
    如果我有无模对话框弹出,这样得到的是top无模对话框的名柄而不是主框架的
    不过还是谢谢
    还有谁有好的方法么?
      

  4.   

    你可以试一试几个windows API 函数:EnumWindows(); 
         GetWindowThreadProcessID(); 
         GetParent(); 
        具体应用为:先枚举全部窗口,在枚举回调函数中调用GetWindowThreadProcessID()得到窗口的进程ID与以前得到的ID比较,如果不一制,不处理,如一样,循环调用GetParent()一直到返回NULL,最后的hwnd既为顶层窗口句柄。
      

  5.   

    这样有点儿累,也不知道那个是当前启的主线程啊。而且如果有非模态窗口,用getparent()是得不到主视的啊,不过还是非常感谢:)!
      

  6.   

    AfxGetApp得到的应该就是主线程啊?
      

  7.   

    不是的如果你是在程序中动态加载了其它DLL的对话框那个DLL会有他自己的theApp不一样的。我已经试过了
      

  8.   

    hWnd=NULL;  
    hWnd=::FindWindow(NULL,"窗口名字");
      

  9.   

    哪就给你窗口注册一个类GUID,通过第一个参数FIND