大家好,新学MFC的窗口,碰到不少初级问题.我想在一个线程里用Application::Run显示窗口,另一个线程在后台处理业务,并且会根据运算结果作用于窗口.也就是说,我需要在业务线程里取得对窗口的控制.VS2008的窗口导向做出来的窗口是public ref class MyWindow : public System::Windows::Forms::Form我在窗口线程用:
MyWindow ^ thewin= gcnew MyWindow();
Application::Run( thewin );
可以成功显示窗口.但是不知道怎样取得这个窗口的控制.听说是通过句柄来实现,查了一下.
MyWindow ^ thewin= gcnew MyWindow();
HWND hwg;
int error = 111; //随便给个值
hwg = ::FindWindow(Null,"LoginServerWindow" ); //LoginServerWindow是MyWindow的Name
error = ::GetLastError();通过断点,发现hwg的值是"未定义的值",但error为0.不知道出了什么问题,盼望有心人解答.还想问问,在窗口线程得到了hwg并传给工作线程以后,在工作线程如何利用hwg来控制窗口?

解决方案 »

  1.   

    如果你要用这样的东西,应该在主线程中提供机制让子线程获得。例如:你可以把窗口设置为app的一个成员变量让别人找到
      

  2.   

    托管的资源不能在别的文件里声明,所以三楼的方法对于这类型的窗口不适用.答案已找到.
    FindWindow作为WINAPI函数,只有当Application::Run运行了之后才有效.
    而鉴于窗口线程的Application::Run运行之后已被消息循环主塞,故FindWindow应在工作线程中调用.