Re: icon background is not transparent when aero is enabled in vis
- From: Joseph M. Newcomer <newcomer@xxxxxxxxxxxx>
- Date: Fri, 01 Aug 2008 09:20:22 -0400
There's a DirectX forum somewhere...
joe
On Thu, 31 Jul 2008 22:18:00 -0700, John <John@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
hi ,JosephJoseph M. Newcomer [MVP]
do you know where i should ask this kind of question in ms forum.
thanks anyway,
John
"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@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
hi, Joseph:Joseph M. Newcomer [MVP]
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
email: newcomer@xxxxxxxxxxxx
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
email: newcomer@xxxxxxxxxxxx
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
.
- References:
- Prev by Date: Re: TrackPopupMenu blocks OnIdle() processing
- Next by Date: Re: How to limit CWnd minimum size?
- Previous by thread: Re: icon background is not transparent when aero is enabled in vis
- Next by thread: Re: problem related to activeX function - RtlValidateHeap
- Index(es):
Relevant Pages
|