codeproject上jerry wang 做了个透明背景图,其原理就是重新用一张PNG图重新画窗口,
代码中我找到了处理背景的操作,但是我在自己的MFC工程中在onEraseBkg里用同样的操作一张PNG图做背景时,再用
updtaelayerwindow 显示的确是全透明背景……看了BLENDFUNCTION的介绍,知道跟alpha操作有关。 //Image *pImage=CUtility::LoadImage(IDB_PNG1,"PNG",AfxGetResourceHandle());
//UINT m_nWidth=pImage->GetWidth();
//UINT m_nHeight=pImage->GetHeight();
//POINT ptSrc = { 0, 0};
//POINT ptWinPos = { clientRC.left, clientRC.top};
//SIZE szWin = { m_nWidth, m_nHeight };
//BLENDFUNCTION bl={AC_SRC_OVER,0,5,AC_SRC_ALPHA};
//BITMAPINFOHEADER stBmpInfoHeader = { 0 };
//int nBytesPerLine = ((m_nWidth * 32 + 31) & (~31)) >> 3;
//stBmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
//stBmpInfoHeader.biWidth = m_nWidth;
//stBmpInfoHeader.biHeight =m_nHeight;
//stBmpInfoHeader.biPlanes = 1;
//stBmpInfoHeader.biBitCount = 32;
//stBmpInfoHeader.biCompression = BI_RGB;
//stBmpInfoHeader.biClrUsed = 0;
//stBmpInfoHeader.biSizeImage = nBytesPerLine * m_nHeight; //PVOID pvBits=NULL;
//HBITMAP hbmp=CreateDIBitmap(NULL,&stBmpInfoHeader,DIB_RGB_COLORS,&pvBits,NULL,0); //HGDIOBJ hbmpOld=::SelectObject(memDC.GetSafeHdc(),hbmp);
//Graphics graph(memDC.GetSafeHdc());
//graph.SetSmoothingMode(SmoothingModeNone);
//graph.DrawImage(pImage,0,0,m_nWidth,m_nHeight);这样做跟原作的例子应该具有相同的效果,为什么我的就是不行呢?附上原作地址大家看看:http://www.codeproject.com/KB/dialog/SemiTranDlgWithCtrls.aspx
我再看看的网上说的机制- -
代码中我找到了处理背景的操作,但是我在自己的MFC工程中在onEraseBkg里用同样的操作一张PNG图做背景时,再用
updtaelayerwindow 显示的确是全透明背景……看了BLENDFUNCTION的介绍,知道跟alpha操作有关。 //Image *pImage=CUtility::LoadImage(IDB_PNG1,"PNG",AfxGetResourceHandle());
//UINT m_nWidth=pImage->GetWidth();
//UINT m_nHeight=pImage->GetHeight();
//POINT ptSrc = { 0, 0};
//POINT ptWinPos = { clientRC.left, clientRC.top};
//SIZE szWin = { m_nWidth, m_nHeight };
//BLENDFUNCTION bl={AC_SRC_OVER,0,5,AC_SRC_ALPHA};
//BITMAPINFOHEADER stBmpInfoHeader = { 0 };
//int nBytesPerLine = ((m_nWidth * 32 + 31) & (~31)) >> 3;
//stBmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
//stBmpInfoHeader.biWidth = m_nWidth;
//stBmpInfoHeader.biHeight =m_nHeight;
//stBmpInfoHeader.biPlanes = 1;
//stBmpInfoHeader.biBitCount = 32;
//stBmpInfoHeader.biCompression = BI_RGB;
//stBmpInfoHeader.biClrUsed = 0;
//stBmpInfoHeader.biSizeImage = nBytesPerLine * m_nHeight; //PVOID pvBits=NULL;
//HBITMAP hbmp=CreateDIBitmap(NULL,&stBmpInfoHeader,DIB_RGB_COLORS,&pvBits,NULL,0); //HGDIOBJ hbmpOld=::SelectObject(memDC.GetSafeHdc(),hbmp);
//Graphics graph(memDC.GetSafeHdc());
//graph.SetSmoothingMode(SmoothingModeNone);
//graph.DrawImage(pImage,0,0,m_nWidth,m_nHeight);这样做跟原作的例子应该具有相同的效果,为什么我的就是不行呢?附上原作地址大家看看:http://www.codeproject.com/KB/dialog/SemiTranDlgWithCtrls.aspx
我再看看的网上说的机制- -
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货