トップレベルのウィンドウを作成したい場合は、Roel の回答で問題ありません。子ウィンドウを作成する必要がある場合 (コントロールを作成している場合はそうでなければなりません)、WS_EX_LAYERED を使用することはできません (これは Windows 8 以降で変更されたと思います)。
簡単なトリックは、コントロールの背景として親を描画することです。したがって、OnEraseBkgnd に次のコードを追加できます。
BOOL uiBarcodeButton::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(rect);
return afxGlobalData.DrawParentBackground( this, pDC, rect);
}
afxGlobalData グローバル変数が MFC 2008 Feature Pack 専用かどうかは不明です。以前のバージョンの MFC を使用している場合は、DrawParentBackground のコードを使用できます。
ASSERT_VALID(pDC);
ASSERT_VALID(pWnd);
BOOL bRes = FALSE;
CRgn rgn;
if (rectClip != NULL)
{
rgn.CreateRectRgnIndirect(rectClip);
pDC->SelectClipRgn(&rgn);
}
CWnd* pParent = pWnd->GetParent();
ASSERT_VALID(pParent);
// In Windows XP, we need to call DrawThemeParentBackground function to implement
// transparent controls
if (m_pfDrawThemeBackground != NULL)
{
bRes = (*m_pfDrawThemeBackground)(pWnd->GetSafeHwnd(), pDC->GetSafeHdc(), rectClip) == S_OK;
}
if (!bRes)
{
CPoint pt(0, 0);
pWnd->MapWindowPoints(pParent, &pt, 1);
pt = pDC->OffsetWindowOrg(pt.x, pt.y);
bRes = (BOOL) pParent->SendMessage(WM_ERASEBKGND, (WPARAM)pDC->m_hDC);
pDC->SetWindowOrg(pt.x, pt.y);
}
pDC->SelectClipRgn(NULL);
return bRes;