MFC:如何在拖动时将窗口显示在新位置之前重绘窗口

时间:2017-02-03 17:57:15

标签: c++ windows winapi mfc

我将子窗口移到父窗口上,并且需要实现与父窗口相关的子窗口的透明度的效果。这意味着子窗口应包含父窗口的相应内容部分。 在调试中,我意识到在此窗口出现在具有旧内容的新位置后,将调用子窗口的方法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();
}

0 个答案:

没有答案