диалог не отображается правильно, когда он создан в подпотоке - PullRequest
0 голосов
/ 11 октября 2010

Я пытаюсь добавить функцию всплывающего сообщения в свой проект. И я запускаю ее в подпотоке, так как мне нужно уведомление в реальном времени. Но я нахожу, если в моей подпроцессе создано диалоговое окно уведомления (запущенное1001 *), все элементы (кнопки, URL-адреса ....) диалогового окна не отображаются. Окно сообщения - это просто пустое диалоговое окно.Если я извлекаю функцию и запускаю ее с помощью кнопки, то она работает нормально. Вот функция, это довольно просто.

UINT sendNotification(LPVOID pParam)
{
   int x = GetSystemMetrics(SM_CXSCREEN);
   int y = GetSystemMetrics(SM_CYSCREEN);

   testPopDlg *testPop = new testPopDlg;
   testPop->Create(IDD_TEST,0);
   CRect lprect(0,0,0,0);
   testPop->GetWindowRect(lprect);
   int w = lprect.Width();
   int h = lprect.Height();
   testPop->web.Navigate("http://www.google.com",NULL,NULL,NULL,NULL);
   testPop->ShowWindow(SW_SHOW);
   for(int k=0;k<20;k++)    //slide out
   {
      testPop->MoveWindow(x-w,y-h*k/20,w,y-h*k/20,1);
      Sleep(20);
   }
   Sleep(5000);   //will close after 5 sec
   return 0;
}

Почему эта функция не работает правильно в субпотоке?

1 Ответ

1 голос
/ 11 октября 2010

Чтобы использовать диалог в другом потоке в MFC, вы должны создать его в потоке UI .Чтобы создать поток пользовательского интерфейса, вы должны создать класс, производный от CWinThread .См. Также код проекта статьи .

...