各位好,我在窗口的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();
窗口就一点都不显示了。
请大侠给指点下。
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();
CWnd类有一个GetSafeHwnd()函数,取得安全的句柄,直接用m_hWnd容易有问题。
还有就是窗口的样式,我昨天改模态窗口的样式,莫名其妙的程序启动就退出,改回来就好了。
再不行就手动调试了,看是在哪一句代码出的问题,然后再修正。
就是窗口show不出来
lExStyle ^= WS_EX_LAYERED;
//加入WS_EX_LAYERED扩展属性
SetWindowLong(m_hWnd, GWL_EXSTYLE, lExStyle);
然后调用
UpdateLayeredWindow,Onpaint将不再被调用了。