do you know where i should ask this kind of question in ms forum.
"Joseph M. Newcomer" wrote:
Once you enter into the D3D realm, I have no idea what to do; I've never used it. This
also means there is potential interaction between Aero and D3D. So I have to bow out at
this point.
joe
On Thu, 31 Jul 2008 19:28:12 -0700, John <John@discussions.microsoft.com> wrote:
hi, Joseph:
thanks for your quick response and
thanks for taking your time to select my faults in my code.
i will correct them ,
thanks once more
//////////////////////////////////////////
but maybe i didn't speak clearly my question.
so i make a simple samle,
use the the same process like my real code.
and the result is the same with my real application
first: i use D3D (direct draw) to draw a surface "A",
second: i draw a icon on the "A" using gdi
the background of the icon i make using vc2005 is transparent.
it is right when aero is disabled in vista in xp or,
but when aero is enabled in vista ,
the icon 's backbround is white, not transparent .so it is wrong.
the sample code like below
///use direct draw to draw surface begin
LPDIRECTDRAWSURFACE7 m_pddsFrontBuffer;
LPDIRECTDRAWSURFACE7 m_pddsStoreBuffer;
HRESULT hRet;
RECT rt;
POINT p = {0, 0};
ClientToScreen(hWnd, &p);
rt.left = 0 + p.x; rt.top = 0 + p.y; rt.right = 800 + p.x; rt.bottom = 600 +
p.y;
while( 1 )
{
hRet = m_pddsFrontBuffer->Blt(&rt, m_pddsStoreBuffer, NULL, DDBLT_WAIT, NULL);
if (hRet == DD_OK)
break;
else if(hRet == DDERR_SURFACELOST)
{
m_pddsFrontBuffer->Restore();
m_pddsStoreBuffer->Restore();
}
else if(hRet != DDERR_WASSTILLDRAWING)
return;
}
///use direct draw to draw surface end
/// draw icon on surface begin
HICON icon = AfxGetApp()->LoadIcon(IDI_ICON1);
CClientDC dc(this);
RECT rtClient;
this->GetClientRect(&rtClient);
// x, y is the coordinate when user left-click mouse on surface.
dc.DrawIcon(x, y, icon);
/// draw icon surface end
when i add three lines code ,
the icon 's background is transparent when aero is enabled in vista,
the code like below
///////////////////////////////////////
HDC hDCDisplay = ::CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
::BitBlt(dc.m_hDC, 0, 0, rtClient.right - rtClient.left, rtClient.bottom -
rtClient.top, hDCDisplay, rtClient.left, rtClient.top, SRCCOPY);
DeleteDC(hDCDisplay);
//////////////////////////////////
so i think it is a bug of microsoft?
when draw icon using gdi on surface using d3d, when aero is enabled in
vista, the icon 's background cant still keep transparent like normal.
only a guess.
hope your response.
good regards
John
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm