WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  (MFC) Как заставить из потока перерисовываться окно?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   (MFC) Как заставить из потока перерисовываться окно?
vadim2002 опубликован 29-01-2002 12:11 MSK   Click Here to See the Profile for vadim2002   Click Here to Email vadim2002  
Запускается поток:
AfxBeginThread(prcs,this,THREAD_PRIORITY_NORMAL);

Из этого потока (prcs) не могу перерисовывать окно программы
а это из потока нужно делать не один раз.

Как заставить из потока перерисовываться окно?

Поясню:
Предположим ипсользую класс:

class CTmpView : public CScrollView

в нем определена функция реакции на пункт меню:

protected:
//{{AFX_MSG(CTmpView)
afx_msg void OnStart();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()


в этой функции запускается поток (функция prcs)

void CTmpView::OnStart()
{
// TODO: Add your command handler code here
AfxBeginThread(prcs,this,THREAD_PRIORITY_NORMAL);
}

UINT prcs(LPVOID param)
{

// всякие операции изменяют информацию для отрисовки в CTmpView
// далее надо перерисовать окно ???
// ни один из приведенных ниже вариантов не заставляет окно перерисоваться

RedrawWindow(((CTmpView*)param)->GetSafeHwnd(),NULL,NULL,RDW_FRAME);

UpdateWindow(((CTmpView*)param)->GetSafeHwnd());

((CTmpView*)param)->PostMessage(WM_PAINT);

((CTmpView*)param)->SendMessage(WM_PAINT);
}

Что делать?

DmitryRyvkin опубликован 29-01-2002 13:43 MSK     Click Here to See the Profile for DmitryRyvkin  Click Here to Email DmitryRyvkin     
Что то я не понял, как в prcs попадет хендл окна ? Все таки надо при создании потока дать ему хендл, а затем использовать ф-ции типа FromHandle
Если я конечно правильно все понял
vadim2002 опубликован 29-01-2002 13:56 MSK     Click Here to See the Profile for vadim2002  Click Here to Email vadim2002     
в prcs попадает параметр param, который есть: СTmpView*, это определилось при запуске потока:
AfxBeginThread(prcs,this,THREAD_PRIORITY_NORMAL); this - это и есть param, а от него пытаюсь получить hwnd окна например в вызове: UpdateWindow(((CTmpView*)param)->GetSafeHwnd()), но это не срабатывает :(
kit опубликован 29-01-2002 14:01 MSK     Click Here to See the Profile for kit  Click Here to Email kit     
Похоже, что MFC не всегда спешит вызывать функцию OnPaint при получении WM_PAINT. Попробуй явно написать что-то вроде SendMessasge(WM_PAINT) в функции OnStart и увидишь, что во View OnPaint не вызвалась.
Поток здесь не причем, используй явную перерисовку:
pView->Invalidate(TRUE) - будет работать.
vadim2002 опубликован 29-01-2002 14:06 MSK     Click Here to See the Profile for vadim2002  Click Here to Email vadim2002     
Спасибо за совет, к сожалению могу попробовать только вечером.
Kostik опубликован 29-01-2002 14:53 MSK     Click Here to See the Profile for Kostik  Click Here to Email Kostik     
2 kit - пять баллов.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.