Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Сообщение виду (doc\view)


Автор: 13dreams 28.9.2010, 13:45
создаю поток в OnCreate 

Код

HWND *phObjectHandle = new HWND;
  *phObjectHandle = GetSafeHwnd();
    m_pThread=AfxBeginThread(ThreadProc, phObjectHandle);  //Запуск потока


Код

UINT CThreadSdiView::ThreadProc(LPVOID param)  //Создание потоковой функции 
{
    HWND *phObjectHandle = static_cast<HWND *>(param);    

//    
    while(1)
    {    
        *phObjectHandle=::GetForegroundWindow();    //ОКНУ КОТОРОЕ АКТИВНО
    CString* ps = new CString("");
    *ps="1111";


    ::PostMessage(*phObjectHandle, WM_LOG, (WPARAM)ps, (LPARAM)0);
     Sleep(2000);
    }
    delete phObjectHandle;
    
    return 0;
}


Сообщение приходит в класс рамки окна, а не в класс CThreadSdiView.

Как отправить сообщение именно в класс вида?

Код

CView* pView=((CFrameWnd*)AfxGetMainWnd())->GetActiveView()
 в самом потоке не срабатывает

Автор: Earnest 28.9.2010, 18:41
Проверь параметр, который ты передаешь в поток. Это должен быть хандл именно вью. А ты не написал в чьем OnCreate ты создаешь поток.
Кому посылаешь, тот и получит, никаких чудес.
И нафик не надо выделять память под HWND динамически. Просто передай его в lPARAM в функцию потока и все.

В потоке действительно нельзя получить MFC-окна,

Автор: 13dreams 28.9.2010, 20:22
Разобрался!

я делал 
Код

CView* pView=((CFrameWnd*)AfxGetMainWnd())->GetActiveView()
 в OnCreate и кажется тогда ещё вид не создан, поэтому и ошибка была

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)