我将子窗口移到父窗口上,并且需要实现与父窗口相关的子窗口的透明度的效果。这意味着子窗口应包含父窗口的相应内容部分。
在调试中,我意识到在此窗口出现在具有旧内容的新位置后,将调用子窗口的方法OnPaint()
。它产生恼人的内容颤抖效果。
因此,问题是如何强制子窗口在它出现在新位置之前处理WM_PAINT
消息。
在重新定位子窗口之前,我会Invalidate()
。
void CTextBoxDlg::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
CDialog::OnWindowPosChanging(lpwndpos);
Invalidate();
}
这是我的OnPaint
void CTextBoxDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
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();
}