-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 に答える