Возникла проблема в MFC при работе с OnPaint и Invalidate. Дело в том, что при срабатывании Invalidate (которая делает недействительной клиентскую часть окна) вызывается OnPaint (которая эту самую часть перерисовывает). То есть посредством этих двух функций происходит обновление картинки в окне и все это делается в классе, отвечающем за клиентскую часть окна (который в моем случае называется AVIPlayerDlg). Так вот, мне нужно функцию OnPaint вынести в новый, производный от CWnd класс (назовем его MyWnd). Я так сделал, но проблема в том, что теперь при вызове Invalidate (вызываемого из AVIPlayerDlg.cpp) OnPaint (находящийся в MyWnd.cpp) не вызывается. Так вот, вопрос, как сделать так, чтобы вызывался?
P.S.: я попытался описать суть проблемы, опуская ненужную информацию, поэтому она выглядит как-будто "вырванной из контекста". Надеюсь, я смог описать все достаточно четко для понимания.
Обновление
void Cpr2Dlg::OnTimer(UINT_PTR nIDEvent)//Таймер, считающий время
{
// TODO: добавьте свой код обработчика сообщений или вызов стандартного
{
//Здесь происходит обработка
//времени работы таймера,
//вследствие чего раз в некоторый
//n-ный промежуток времени вызывается...
Invalidate(false);
}
CDialogEx::OnTimer(nIDEvent);
}
//Так было изначально
//Функции принадлежали одному классу
//Поэтому через некоторое время после вызова Invalidate
//автоматически вызывался OnPaint
void Cpr2Dlg::OnPaint()
{
CPaintDC dc(this); // контекст устройства для рисования
HRESULT re = SetDIBitsToDevice (dc, 140, 20, 210, 180, 0, 0, 0, 180, dlg.dataConv, theApp.bmpInfoOut, DIB_RGB_COLORS);
}
//Теперь же OnPaint принадлежит другому классу
//И при срабатывании Invalidate не вызывается
//А нужно, чтобы вызывалась
//class MyWnd : public CWnd - Класс MyWnd я создал сам и он наследуется от CWnd - основного класса окна
void CMyWnd::OnPaint()
{
CPaintDC dc(this); // контекст устройства для рисования
HRESULT re = SetDIBitsToDevice (dc, 140, 20, 210, 180, 0, 0, 0, 180, dlg.dataConv, theApp.bmpInfoOut, DIB_RGB_COLORS);
}
Попытался предоставить фрагмент кода, проблема в том, что проект довольно-таки обширный и разбит на несколько файлов. Надеюсь, так будет понятнее
Сборка персонального компьютера от Artline: умный выбор для современных пользователей