各位好,我在窗口的OnInitDialog中加入了如下的代码。
窗口就一点都不显示了。
请大侠给指点下。
CDC * pDC = GetDC();
CDC memDC;
CBitmap bmp;
CBitmap * pOldBmp = NULL;
GetClientRect(&rc); memDC.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());
pOldBmp = memDC.SelectObject(&bmp); Graphics graphics(memDC.GetSafeHdc());
graphics.DrawImage(m_pPngTitle, 0, 0, m_pPngTitle->GetWidth(), m_pPngTitle->GetHeight());
graphics.DrawImage(m_pPngBody, 0, m_pPngTitle->GetHeight(), m_pPngBody->GetWidth(), m_pPngBody->GetHeight()); m_bf.BlendOp =0; //theonlyBlendOpdefinedinWindows2000
m_bf.BlendFlags = 0; //nothingelseisspecial...
m_bf.AlphaFormat = 1; //...
m_bf.SourceConstantAlpha = 150;//AC_SRC_ALPHA
POINT ptWinPos={rc.left, rc.top};
SIZE sizeWindow={rc.Width(), rc.Height()};
POINT ptSrc={0,0};
BOOL bRet=FALSE;
bRet = ::UpdateLayeredWindow(m_hWnd, pDC->m_hDC, &ptWinPos, &sizeWindow, memDC.m_hDC, &ptSrc, 0, &m_bf, ULW_ALPHA);
if( !bRet ){
TRACE1("UpdateLayeredWindow FAILED[%d].\n", GetLastError());
return FALSE;
}

memDC.SelectObject(pOldBmp);
bmp.DeleteObject();
memDC.DeleteDC();

解决方案 »

  1.   

    MFC???
    CWnd类有一个GetSafeHwnd()函数,取得安全的句柄,直接用m_hWnd容易有问题。
    还有就是窗口的样式,我昨天改模态窗口的样式,莫名其妙的程序启动就退出,改回来就好了。
    再不行就手动调试了,看是在哪一句代码出的问题,然后再修正。
      

  2.   

    代码没有问题,返回也都正常的。
    就是窗口show不出来
      

  3.   

    UpdateLayeredWindow 。 1.要把窗体添加扩展样式。  2. OnPaint里自绘位图。 
      

  4.   

    long lExStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE); 
    lExStyle ^= WS_EX_LAYERED;
    //加入WS_EX_LAYERED扩展属性
    SetWindowLong(m_hWnd, GWL_EXSTYLE, lExStyle);
    然后调用
    UpdateLayeredWindow,Onpaint将不再被调用了。
      

  5.   

    除了设置WS_EX_LAYERED样式,还需要其他的处理么?