我做一个Dialog,重载了OnCtlColor函数:
HBRUSH CMyAppDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
return m_Brush;
}m_Brush在构造函数里赋值:
CBrush m_Brush;
CBitmap* m_pDlgBkBmp;
CMyAppDlg::CMyAppDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyAppDlg::IDD, pParent)
{
m_pDlgBkBmp=new CBitmap;
m_pDlgBkBmp->LoadBitmap(IDB_MAINFRAM);
m_Brush.CreatePatternBrush(m_pDlgBkBmp);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
IDB_MAINFRAM是背景图
发现窗口背景是有了,可是我上面原来的Edit里面的背景也设成了IDB_MAINFRAM最左上角部分,我现在想把Edit的背景去掉,该怎么做,如果要把Edit设成透明,又该怎么做,谢谢!!
HBRUSH CMyAppDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
return m_Brush;
}m_Brush在构造函数里赋值:
CBrush m_Brush;
CBitmap* m_pDlgBkBmp;
CMyAppDlg::CMyAppDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyAppDlg::IDD, pParent)
{
m_pDlgBkBmp=new CBitmap;
m_pDlgBkBmp->LoadBitmap(IDB_MAINFRAM);
m_Brush.CreatePatternBrush(m_pDlgBkBmp);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
IDB_MAINFRAM是背景图
发现窗口背景是有了,可是我上面原来的Edit里面的背景也设成了IDB_MAINFRAM最左上角部分,我现在想把Edit的背景去掉,该怎么做,如果要把Edit设成透明,又该怎么做,谢谢!!
解决方案 »
- SetWindowsHookEx返回值总是为0
- vc操作WMI获取sting[]的问题
- CListCtrl GetSubItemRect返回为TRUE,取得的CRect结果却不正确,困惑中......
- 获取dlg里面的button的位置是什么函数?
- 如何使用windump?
- 把dll放进资源后,如何调用其中的函数
- 如何使用UDP传送文件(效率越高分越高)!!!
- 除了strcpy()外,有没有其它的字符串拷贝函数?
- win32 API 回车换行自动对齐
- 我在将一个数组另存为的时候,出现值不对应的情况,另存的文档出现乱码,请朋友们指正!
- CryptoAPI中怎样才能得到私钥
- 新手问题:CScrollView中拉滚动条后有问题
{
if (nCtlColor == CTLCOLOR_DLG)
{
return m_Brush;
}
else
{
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
}
pDC->SetBkMode(TRANSPARENT);
才能设透明,这一句要加到什么地方?
谢谢
{..
HBRUSH hbr= CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC)
pDC->SetBkMode(TRANSPARENT);
return hbr;
}
{..
HBRUSH hbr= CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
pDC->SetBkMode(TRANSPARENT);
return hbr;
}
{
if (nCtlColor == CTLCOLOR_DLG)
{
return m_Brush;
}
else if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
}
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);}
pDC->SetBkMode(TRANSPARENT);
HBRUSH CMyAppDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
return m_Brush;
}
//m_Brush是自定义的背景,现在这个Dialog上放了一个静态文本控件和一个Edit控件,在我用了上面那段代码后,Edit控件的背景也被设成和Dialog一样了,我现在想重写代码,
背景还是m_Brush,但不要让Edit控件设背景,而且静态文本控件也要是透明的,应该怎么写
代码,谢谢!
{
pDC->SetBkMode(TRANSPARENT);
return m_Brush;
}
这样就可以了,我试过了
抱歉
Go and check this link:
http://www.csdn.net/develop/read_article.asp?id=9603
title is:绘制有纹理的背景的应用程序
solved by:Paul DiLascia
1,对话框的背景色设置原样处理;
2,创建一个CMyStatic类,让其设置自己的颜色,而不是让起父类设置。 在头文件中添加以下代码:
afx_msg HBRUSH CtlColor(CDC* pDC,UINT nCtlColor);在cpp文件中,指定消息映射的入口:
ON_WM_CTLCOLOR_REFLECT();在cpp文件中,加上如下代码:
HBRUSH CMyStatic::CtlColor(CDC* pDC,UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
}
编辑控件也是按照同样的方法去做,只是CtlColor函数为空。
HBRUSH CMyAppDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr= CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
pDC->SetBkMode(TRANSPARENT);
hbr = m_Brush;
break;
case CTLCOLOR_DLG:
hbr = m_Brush;
break;
default:
break;
}
return hbr;
}