Re: CStatic::SetIcon Transparent.
But dialog background is painted with Gradient Color. And, I am expecting
this gradient as to be background for CStatic.
class CMyDialog : public CDialog
{
........
CStatic m_StaticIcon;
........
}
HBRUSH CMyDialog:nCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog:nCtlColor(pDC, pWnd, nCtlColor);
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
if (pWnd->m_hWnd == m_StaticIcon.m_hWnd)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)(GetStockObject(NULL_BRUSH));
}
break;
}
return hbr;
}
BOOL CMyDialog:nInitDialog()
{
.........
m_StaticIcon.Create(_T(""), WS_CHILD | WS_VISIBLE | SS_ICON,
CRect(0, 0, 0, 0), this);
HICON hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(ICON_ID));
m_StaticIcon.SetIcon(hIcon);
.........
}
In CMyDialog:nPaint(), I have painted a region of CDialog with
GradientFill(...), and on this area I want a static icon, which needs to be
transparent. So that I can see the background of CStatic icon as gradient.
Regards,
Paresh.
"foobar" wrote:
I think removing
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
if (pWnd->m_hWnd == m_StaticIcon.m_hWnd)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)(GetStockObject(NULL_BRUSH));
}
break;
}
from your OnCtlColor function helps in showing the background that you
want.
On Apr 22, 4:54 pm, Paresh <Par...@discussions.microsoft.com> wrote:
Yes, it shows correctly. But the rest area of the icon, (which should be
transparent) is painted with black color.
Regards,
Paresh.
"foobar" wrote:
Does the icon show up if you don't use transparent style?
On Apr 22, 4:32 pm, Paresh <Par...@discussions.microsoft.com> wrote:
No Success :(.
Regards,
Paresh.
"somefoo...@gmail.com" wrote:
I have two suggestions
1. You don't need to set transparent style each time OnCtlColor method
gets exectued. Instead use WS_EX_TRANSPARENT while creating the
CStatic window . You need to use CreateEx method to set this style at
the time of window creation.
2. I see CRect(0, 0, 0, 0) in the parameter list of Create method. Did
you try setting correct rectangle values?
On Apr 22, 1:51 pm, Paresh <Par...@discussions.microsoft.com> wrote:
class CMyDialog : public CDialog
{
........
CStatic m_StaticIcon;
........
}
HBRUSH CMyDialog:nCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog:nCtlColor(pDC, pWnd, nCtlColor);
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
if (pWnd->m_hWnd == m_StaticIcon.m_hWnd)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)(GetStockObject(NULL_BRUSH));
}
break;
}
return hbr;
}
BOOL CMyDialog:nInitDialog()
{
.........
m_StaticIcon.Create(_T(""), WS_CHILD | WS_VISIBLE | SS_ICON,
CRect(0, 0, 0, 0), this);
HICON hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE(ICON_ID));
m_StaticIcon.SetIcon(hIcon);
.........
}
In CMyDialog:nPaint(), I have painted a region of CDialog with
GradientFill(...), and on this area I want a static icon, which needs to be
transparent. So that I can see the background of CStatic icon as gradient.
Regards,
Paresh.
"somefoo...@gmail.com" wrote:
Can you paste the code that you have? That should help in identifying
the problem.
On Apr 22, 11:34 am, Paresh <Par...@discussions.microsoft.com> wrote:
Hi,
I am using the API CStatic::SetIcon to associate the icon with the static
control. I have placed this control on CDialog, (Dialog background is
gradient painted). I want this CStatic control to be transparent (so that the
background of CStatic would be gradient, which is of Dialogs background
color). However, icon image is transparent. How could I do this ?
Any help would be highly appreciated.
Thanks,
Paresh.