Операции сразу после появления диалогового окна - PullRequest
1 голос
/ 13 июля 2011

Я работаю с проектом MFC.У меня есть ситуация, когда я хочу сделать подробный расчет, как только появится диалоговое окно.Я попытался поместить эти вычисления в OnInitDialog (), а также попытался поместить его в конструктор.По очевидным причинам, при таком подходе для появления диалогового окна, которое не предназначено, требуется время.

Есть ли способ, с помощью которого я могу выполнить свои вычисления сразу после появления диалогового окна?Если да, то в какую функцию мне нужно вписать свой код?

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

Да, решение этой проблемы - создание другого потока из конструктора или переопределение OnInitDialog.Но для возврата в диалоговое окно уведомления о том, что Сложная инициализация завершена , вам нужно использовать SendMessage или PostMessage, чтобы диалоговое окно узнало об этом завершении и соответствующим образом обновило пользовательский интерфейс.Вам также необходимо иметь собственный код сообщения (WM_USER + N или WM_APP + N ) вместе с записью в карте сообщений: ON_MESSAGE.

1 голос
/ 13 июля 2011
BOOL CMFC_dialogDlg::OnInitDialog()
{
 AfxBeginThread(ThreadFunc,NULL/*Pass the parameter to the function*/);
}

UINT ThreadFunc(LPVOID param)
{
 /*Do complex task*/

 for(int i=0;i<1000 ;i++)
 {
 }

}
1 голос
/ 13 июля 2011

В этой ситуации вам нужно выполнить вычисления в подпотоке. Обычно я делаю эту работу, используя AfxBeginThread .

...