如何创建透明对话框(不可见),但在MFC上可以看到在其上绘制的图像或文本?

时间:2013-06-22 14:16:41

标签: mfc

如何创建透明对话框,但在MFC上可以看到在其上绘制的图像或文本。 我搜索了许多文章,但没有得到我想要的。 我想在我的项目中部署它。 帮助,请帮助。

1 个答案:

答案 0 :(得分:1)

在OnInitDialog中你放了这个:

SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE) ^ WS_EX_LAYERED);
SetLayeredWindowAttributes(m_hWnd, RGB(255,0,255), 0, LWA_COLORKEY);

RGB(255,0,255)是品红色的COLORREF。我们在此假设您不在对话框中的任何位置使用颜色洋红色。因此,对话框的所有品红色像素都是透明的。由于您只想让背景透明,我们将以洋红色绘制对话框的背景。这是通过WM_ERASEBKGND消息完成的:

在对话框的消息地图中添加ON_WM_ERASEBKGND(),因此您的消息地图应如下所示:

BEGIN_MESSAGE_MAP(CYourDialogDlg, CDialog)
//{{AFX_MSG_MAP(CYourDialogDlg)
...
//}}AFX_MSG_MAP
  ON_WM_ERASEBKGND()
END_MESSAGE_MAP()

在对话框的标题文件中,您应该有afx_msg BOOL OnEraseBkgnd(CDC* pDC);

在对话框的.cpp文件中输入:

BOOL CYourDialogDlg::OnEraseBkgnd(CDC *pDC)
{
  CRect clientRect ;

  GetClientRect(&clientRect) ;
  pDC->FillSolidRect(clientRect, RGB(255,0,255)) ;  // paint background in magenta

  return FALSE  ;
}

Sample dialog as visible in the dialog editor and as visible once executed