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