Перемешаю мышкой child окно над другим parent окном.
Хочу добиться эффекта прозрачности child окна относительно parent окна.
Дебагом обнаружил, что OnPaint child окна вызывается после того как окно появляется в новом месте.
То есть получается, сначала окно перемещается в новое место, там рисуется со старым содержимым, а потом перерисовывается его содержимое.
Вопрос: Как перерисовать содержимое до того как окно возникнет в новом месте?
Немного предыстории:
Есть окно в котором нарисована большая картинка. Задача на этом окне вводить текст в любой позиции. Этот текст потом добавляется к картинке и сохраняется.
Решил сделать с помощью дополнительного окна с прозрачным CEdit для ввода текста (чтобы не реализовывать все штуки по работе с текстом самостоятельно).
Все замечательно, но осталась проблема с перемещением этой рамки (окна с текстовым полем) поверх первого окна с картинкой. Когда я перемещаю рамку,
то содержимое дочернего окна рамки перерисовывается с задержкой из за чего создается неприятный эффект несоответствия содержания двух окон.
Для перерисовки дочернего окна-рамки я делаю следующее:
void CTextBoxDlg::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
CDialog::OnWindowPosChanging(lpwndpos);
Invalidate();
}
А Вот OnPaint который берет содержимое parent окна и рисует нужную область из него.
void CTextBoxDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
//CDC MemDC;
//BITMAP bit;
CDC* pParentDC = m_pParentWnd->GetDC();
CRect rect;
GetWindowRect(&rect);
dc.BitBlt(0, 0, rect.Width(), rect.Height(), pParentDC, rect.left, rect.top, SRCCOPY);
dsc.Draw(dc);
CDialog::OnPaint();
}