-1

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

4

1 回答 1

2

在 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  ;
}

示例对话框在对话框编辑器中可见,并且在执行后可见

于 2013-07-29T15:41:42.407 回答