在OnCtlColor()函数中,pDC->SetBkMode(TRANSPARENT) Edit控件的字显示在滚动时会模糊? 在OnCtlColor()函数中,pDC->SetBkMode(TRANSPARENT) Edit控件的字显示在滚动时会模糊? HBRUSH b=CreateSolidBrush(RGB(255,255,255)),return b, 当Edit滚动时, 黑字会叠在一起, 直至Edit的白色背景完全变黑。 我该怎么办?请各位帮帮忙!谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为何一定要把Edit的背景也设置为TRANSPARENT呢?如果希望使用Edit也透明,需要编写一个继承于CEdit的类,并拦截它的WM_ERASEBKG消息。一般情况下,在OnCtlColor()里,测试一下控件的ID,如果是IDC_STATIC,把它设为TRANSPARENT就行了。 谢谢TearyWang不是很明白,能不能写个简单例子,只要有简单结构就行,谢谢! 呵呵,其实你把主窗口的背景色设为白的,Edit就是透明的了 CMyEditCtrl::CMyEditCtrl(){ m_brHollow.CreateStockObject(HOLLOW_BRUSH); m_x = 0; m_y = 0;}CMyEditCtrl::~CMyEditCtrl(){}BEGIN_MESSAGE_MAP(CMyEditCtrl, CEdit) //{{AFX_MSG_MAP(CMyEditCtrl) ON_WM_CTLCOLOR_REFLECT() ON_WM_LBUTTONUP() ON_CONTROL_REFLECT(EN_CHANGE, OnChange) //}}AFX_MSG_MAP ON_WM_ERASEBKGND()END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMyEditCtrl message handlersHBRUSH CMyEditCtrl::CtlColor(CDC* pDC, UINT nCtlColor) { pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(0xff,0xff,0xff)); return m_brHollow;}void CMyEditCtrl::OnLButtonUp(UINT nFlags, CPoint point) { Invalidate(); CEdit::OnLButtonUp(nFlags, point);}void CMyEditCtrl::OnChange() { Invalidate();// if(m_hDlgWnd != NULL)// CLogManager::instance()->ReportDialPageMsg(m_hDlgWnd); GetWindowText(m_strGetString); GetParent()->SendMessage(WM_INSERTMSG,0,LPARAM((LPCTSTR)m_strGetString)); }BOOL CMyEditCtrl::OnEraseBkgnd(CDC* pDC) { BITMAP bm; m_bmp.GetBitmap(&bm); m_pbmCurrent = &m_bmp; CDC dcMem; dcMem.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent); pDC->BitBlt(m_x,m_y,bm.bmWidth-12,bm.bmHeight,&dcMem,0,0,SRCCOPY); dcMem.SelectObject(pOldBitmap); return TRUE; }这个是加背景图的Edit,看看,对你有没有帮助 HBRUSH 类名::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){ if ( pWnd->GetDlgCtrlID() != IDC_STATIC ) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); return hbr; } else { pDC->SetBkMode(TRANSPARENT); return (HBRUSH)::GetStockObject(HOLLOW_BRUSH); }} 上面有个小错误,用这个HBRUSH 类名::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if ( pWnd->GetDlgCtrlID() != IDC_STATIC ) { HBRUSH hbr = 父类::OnCtlColor(pDC, pWnd, nCtlColor); return hbr; } else { pDC->SetBkMode(TRANSPARENT); return (HBRUSH)::GetStockObject(HOLLOW_BRUSH); } } vs 2008能用vs 2005的dll吗? 菜鸟问题,socket.send(....). 进度条问题 Windows是如何升级的? EnumProcesses(),编译的时候提示找不到Psapi.h?????? 高分求助分不够再加 请各位介绍一些用 VC 进行网络编程的好书 文件关联如果不好系统的DdeShellOpen,自己用代码写怎么写,只要对一定给高分! 无模对话框如何接收键盘消息,而不是让主窗口接收键盘消息? 谁用过在对话框一显示就画图在上面,用哪个事件? 求助达人: 积分 小游戏-打砖块问题-砖块消失
{
m_brHollow.CreateStockObject(HOLLOW_BRUSH);
m_x = 0;
m_y = 0;
}CMyEditCtrl::~CMyEditCtrl()
{
}
BEGIN_MESSAGE_MAP(CMyEditCtrl, CEdit)
//{{AFX_MSG_MAP(CMyEditCtrl)
ON_WM_CTLCOLOR_REFLECT()
ON_WM_LBUTTONUP()
ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
//}}AFX_MSG_MAP
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CMyEditCtrl message handlersHBRUSH CMyEditCtrl::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0xff,0xff,0xff));
return m_brHollow;
}void CMyEditCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
Invalidate();
CEdit::OnLButtonUp(nFlags, point);
}void CMyEditCtrl::OnChange()
{
Invalidate();
// if(m_hDlgWnd != NULL)
// CLogManager::instance()->ReportDialPageMsg(m_hDlgWnd);
GetWindowText(m_strGetString);
GetParent()->SendMessage(WM_INSERTMSG,0,LPARAM((LPCTSTR)m_strGetString));
}BOOL CMyEditCtrl::OnEraseBkgnd(CDC* pDC)
{
BITMAP bm;
m_bmp.GetBitmap(&bm);
m_pbmCurrent = &m_bmp;
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent);
pDC->BitBlt(m_x,m_y,bm.bmWidth-12,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
return TRUE;
}
这个是加背景图的Edit,看看,对你有没有帮助
{ if ( pWnd->GetDlgCtrlID() != IDC_STATIC )
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
else
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
}
}
{ if ( pWnd->GetDlgCtrlID() != IDC_STATIC )
{
HBRUSH hbr = 父类::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
else
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
}
}