原贴地址:http://topic.csdn.net/u/20100823/09/cd20fdb1-aea4-45e1-a674-f544f3f3b6cc.html,现在我实现了背景透明的效果,但是绘图后界面上所有的控件都被绘掉了,只剩一个背景图。
BOOL CTestSkinDlg::OnEraseBkgnd(CDC* pDC)
{
  HDC hdcTemp = pDC->m_hDC;
m_hdcMemory = CreateCompatibleDC(hdcTemp);
HBITMAP hBitMap = CreateCompatibleBitmap(hdcTemp, m_BakWidth, m_BakHeight);
SelectObject(m_hdcMemory, hBitMap);m_Blend.BlendOp=AC_SRC_OVER; //theonlyBlendOpdefinedinWindows2000
m_Blend.BlendFlags=0; //nothingelseisspecial...
m_Blend.AlphaFormat=AC_SRC_ALPHA; //...
m_Blend.SourceConstantAlpha = 255; // 窗口透明度最大为255,最小为0HDC hdcScreen = ::GetDC(m_hWnd);
RECT rct;
GetWindowRect(&rct);
POINT ptWinPos = {rct.left, rct.top};Graphics graph(m_hdcMemory);
Point points[] = { Point(0, 0),
Point(m_BakWidth, 0),
Point(0, m_BakHeight)};
graph.DrawImage(m_pImageBack, points,3);SIZE sizeWindow={m_BakWidth,m_BakHeight};
POINT ptSrc={0,0};
DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
if((dwExStyle&0x80000)!=0x80000)
SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);
UpdateLayeredWindow(m_hWnd, hdcScreen, &ptWinPos, &sizeWindow, m_hdcMemory, &ptSrc, 0, &m_Blend, 2);graph.ReleaseHDC(m_hdcMemory);
::ReleaseDC(m_hWnd,hdcScreen);
hdcScreen=NULL;
::ReleaseDC(m_hWnd,hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(m_hdcMemory);
m_hdcMemory=NULL;return TRUE;
}

解决方案 »

  1.   

    做两个窗口吧,一个窗口显示控件,另一个显示图像
      

  2.   

    您好
    我是本版版主
    此帖已多日无人关注
    请您及时结帖
    如您认为问题没有解决可按无满意结帖处理
    另外本版设置了疑难问题汇总帖
    并已在版面置顶
    相关规定其帖子中有说明
    您可以根据规定提交您帖子的链接
    如您目前不想结帖只需回帖说明
    我们会删除此结帖通知见此回复三日内无回应
    我们将强制结帖
    相关规定详见界面界面版关于版主结帖工作的具体办法
      

  3.   

    你重设置了窗口属性引起的吧