透明なダイアログを作成する方法ですが、それに描画された画像またはテキストは 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 に答える