Возникла проблема в 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);
}
Попытался предоставить фрагмент кода, проблема в том, что проект довольно-таки обширный и разбит на несколько файлов. Надеюсь, так будет понятнее
Топ-20 лучших университетов мира по IT и программированию – Образование за границей
Не понимаю как вызывается функция Receiver::Process() в проектеИскал через (ctrl+shift+f), нашел только использование в Task::TaskExec()
Здравствуйте! С обычным квадратом все просто, но как в него засунуть поменьше квадрат, вот это проблемка
Весь мозг поломал, перечитал все об указателях и так и не понял как сделать этот код работоспособнымКак прямо сказать циклу что я ему подсовываю...
Стоит задача реализовать в приложении на C++ потоковое видео (для браузеров), дали направление - WebMНа официальном сайте куча репозиториев (кодеки,...