在 Dalog base 的 PROJECT 中, 在线程中如何才能调用 Dlg  中的控件和函数?

解决方案 »

  1.   

    把dlg的指针作为线程的参数,即创建线程的时候如下:
    AfxBeginThread(threadname, this);
      

  2.   

    应该传窗口句柄this->hWnd
    1、在线程里:
    CDlg::FromHandle(hWnd);2、要被调用的函数:
    static
      

  3.   

    flyelf(空谷清音) 说的是正确答案。
      

  4.   

    哦,是不是说AfxBeginThread会把handle映射到线程里去??
      

  5.   

    我正好在编写这样的程序。有以下2点体会:
    1。 不能传递句柄
        调用pDlg = CDialog::FromHandle(hDlg)之后,pDlg并不等于
    传递之前的this。 VC只是构造了一个新的dialog对象。所以用pDlg
    作为指针访问成员变量或者成员函数,会得到意想不到的结果。2。 原来线程的基于消息的函数,不能在新线程里边调用
        每个线程都有一个消息队列。他们之间并无联系,互不干涉。
      

  6.   

    不难, 只需要将该线程声明为对话框的友员函数就可以了。
      在dlg的类体中声明:
        inline UINT MyThread(LPVoid pParam);