如何创建透明对话框,但在其上绘制的图像或文本在 MFC 中是可见的。我搜索了很多文章,但没有得到我想要的。我想在我的项目中部署它。帮助可以感激请帮助。
问问题
5394 次
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 回答