在内存dc上textout文字,怎样才能设定文字颜色?为什么我用Memdc.SetTextColor毫无效果? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 刚测试了一下,用SetTextColor没有问题,估计是你的别的地方有错 应该是不会有问题的,至少DrawText已经测试通过 代码如下,有什么错?// CScrollPtStatic 消息处理程序void CScrollPtStatic::OnPaint() { CPaintDC dc(this); m_dc=&dc; // CPaintDC dc(this); // device context for painting m_dc->SetTextColor(m_crText); m_dc->SetBkMode(TRANSPARENT); m_dc->SelectObject(this->GetFont());// CDC MemDC; CDC m_ScMemmdc; m_ScMemmdc.CreateCompatibleDC(m_dc); m_ScMemmdc.SetMapMode(m_dc->GetMapMode()); ///准备工作 CRect rect; CPen BorderPen,*pOldPen,UnderLinePen; CBrush BGBrush,*pOldBrush; BITMAP bm; int nTextLeft=0,nTextTop=0; //文字输出的位置 this->GetClientRect(&rect); ///画边框 if(m_bBorder) { BorderPen.CreatePen(PS_SOLID,1,m_crBorder); BGBrush.CreateSolidBrush(m_crBG); pOldPen = m_dc->SelectObject(&BorderPen); pOldBrush = m_dc->SelectObject(&BGBrush); m_dc->Rectangle(&rect); m_dc->SelectObject(pOldPen); m_dc->SelectObject(pOldBrush); rect.DeflateRect(1,1); } ///贴背景图 if(m_bClicked && m_ClickedBGBm.GetSafeHandle()!=NULL) { m_ScMemmdc.SelectObject(m_ClickedBGBm); m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(), &m_ScMemmdc,0,0,SRCCOPY); } else if(m_bOver && m_MouseOverBGBm.GetSafeHandle()!=NULL)//鼠标经过的时候 { m_ScMemmdc.SelectObject(m_MouseOverBGBm); m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(), &m_ScMemmdc,0,0,SRCCOPY); } else if(m_BGBm.GetSafeHandle()!=NULL) { m_ScMemmdc.SelectObject(m_BGBm); m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(), &m_ScMemmdc,0,0,SRCCOPY); } ///贴标签图片 if(m_bClicked && m_ClickedLabelBm.GetSafeHandle()!=NULL) { m_ClickedLabelBm.GetBitmap(&bm); double fScal=bm.bmWidth*1.0/bm.bmHeight; nTextLeft=int(rect.Height()*fScal)+4; m_ScMemmdc.SelectObject(m_ClickedLabelBm); m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(), &m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); } else if(m_bOver && m_MouseOverLabelBm.GetSafeHandle()!=NULL) { m_MouseOverLabelBm.GetBitmap(&bm); double fScal=bm.bmWidth*1.0/bm.bmHeight; nTextLeft=int(rect.Height()*fScal)+4; m_ScMemmdc.SelectObject(m_MouseOverLabelBm); m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(), &m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); } else if(m_LabelBm.GetSafeHandle()!=NULL) { m_LabelBm.GetBitmap(&bm); double fScal=bm.bmWidth*1.0/bm.bmHeight; nTextLeft=int(rect.Height()*fScal)+4; m_ScMemmdc.SelectObject(m_LabelBm); m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(), &m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); } else { nTextLeft=4; } TEXTMETRIC tm; m_dc->GetTextMetrics(&tm); UINT nWidth = tm.tmAveCharWidth * m_strText.GetLength()+2*width; UINT nHeight = height; m_ScMemmdc.SelectObject(this->GetFont()); m_ScMemmdc.SetTextColor(RGB(255, 0, 0)); CBitmap bitmap; bitmap.CreateCompatibleBitmap(&m_ScMemmdc,nWidth,nHeight); CBitmap* pOldBitmap = m_ScMemmdc.SelectObject(&bitmap); m_ScMemmdc.FillSolidRect(0,0,nWidth,nHeight,m_dc->GetBkColor()); m_ScMemmdc.TextOut(0,0,m_strText); m_dc->BitBlt(0,0,width,nHeight,&m_ScMemmdc,mstartX,0,SRCCOPY); m_ScMemmdc.SelectObject(pOldBitmap); m_ScMemmdc.DeleteDC(); bitmap.DeleteObject(); 用MFC做的俄罗斯方块经常会APPCRASH 端口绑定失败? 求助:网络编程 请高手帮我看看这段代码 华为的面试题目,大家来啊,把标准答案搞出来! 紧急求救!!数据库类型问题 内存泄漏问题! ※※※兄弟姐妹们快来,聊聊网易泡泡(和msn差不多)是怎么做的?※※※ 有人用过SQLSetDescRec吗?请给个例子或建议,谢谢 请教了。activex问题。 各位高手帮我看看这个问题呀,我也很急的!!! 在此谢过了! 我想枚举出在任务栏中的窗口的名称...不过没有效果,,请大侠赐教..
void CScrollPtStatic::OnPaint()
{
CPaintDC dc(this);
m_dc=&dc;
// CPaintDC dc(this); // device context for painting
m_dc->SetTextColor(m_crText);
m_dc->SetBkMode(TRANSPARENT);
m_dc->SelectObject(this->GetFont());// CDC MemDC;
CDC m_ScMemmdc;
m_ScMemmdc.CreateCompatibleDC(m_dc);
m_ScMemmdc.SetMapMode(m_dc->GetMapMode());
///准备工作 CRect rect;
CPen BorderPen,*pOldPen,UnderLinePen;
CBrush BGBrush,*pOldBrush;
BITMAP bm;
int nTextLeft=0,nTextTop=0; //文字输出的位置 this->GetClientRect(&rect); ///画边框
if(m_bBorder)
{
BorderPen.CreatePen(PS_SOLID,1,m_crBorder);
BGBrush.CreateSolidBrush(m_crBG); pOldPen = m_dc->SelectObject(&BorderPen);
pOldBrush = m_dc->SelectObject(&BGBrush); m_dc->Rectangle(&rect); m_dc->SelectObject(pOldPen);
m_dc->SelectObject(pOldBrush); rect.DeflateRect(1,1);
}
///贴背景图
if(m_bClicked && m_ClickedBGBm.GetSafeHandle()!=NULL)
{
m_ScMemmdc.SelectObject(m_ClickedBGBm);
m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),
&m_ScMemmdc,0,0,SRCCOPY);
}
else if(m_bOver && m_MouseOverBGBm.GetSafeHandle()!=NULL)//鼠标经过的时候
{
m_ScMemmdc.SelectObject(m_MouseOverBGBm);
m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),
&m_ScMemmdc,0,0,SRCCOPY);
}
else if(m_BGBm.GetSafeHandle()!=NULL)
{
m_ScMemmdc.SelectObject(m_BGBm);
m_dc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),
&m_ScMemmdc,0,0,SRCCOPY);
}
///贴标签图片
if(m_bClicked && m_ClickedLabelBm.GetSafeHandle()!=NULL)
{
m_ClickedLabelBm.GetBitmap(&bm);
double fScal=bm.bmWidth*1.0/bm.bmHeight;
nTextLeft=int(rect.Height()*fScal)+4;
m_ScMemmdc.SelectObject(m_ClickedLabelBm);
m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(),
&m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
else if(m_bOver && m_MouseOverLabelBm.GetSafeHandle()!=NULL)
{
m_MouseOverLabelBm.GetBitmap(&bm);
double fScal=bm.bmWidth*1.0/bm.bmHeight;
nTextLeft=int(rect.Height()*fScal)+4;
m_ScMemmdc.SelectObject(m_MouseOverLabelBm);
m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(),
&m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
else if(m_LabelBm.GetSafeHandle()!=NULL)
{
m_LabelBm.GetBitmap(&bm);
double fScal=bm.bmWidth*1.0/bm.bmHeight;
nTextLeft=int(rect.Height()*fScal)+4;
m_ScMemmdc.SelectObject(m_LabelBm);
m_dc->StretchBlt(rect.left,rect.top,int(rect.Height()*fScal),rect.Height(),
&m_ScMemmdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
else
{
nTextLeft=4;
} TEXTMETRIC tm;
m_dc->GetTextMetrics(&tm);
UINT nWidth = tm.tmAveCharWidth * m_strText.GetLength()+2*width;
UINT nHeight = height; m_ScMemmdc.SelectObject(this->GetFont());
m_ScMemmdc.SetTextColor(RGB(255, 0, 0)); CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&m_ScMemmdc,nWidth,nHeight);
CBitmap* pOldBitmap = m_ScMemmdc.SelectObject(&bitmap);
m_ScMemmdc.FillSolidRect(0,0,nWidth,nHeight,m_dc->GetBkColor());
m_ScMemmdc.TextOut(0,0,m_strText);
m_dc->BitBlt(0,0,width,nHeight,&m_ScMemmdc,mstartX,0,SRCCOPY);
m_ScMemmdc.SelectObject(pOldBitmap);
m_ScMemmdc.DeleteDC();
bitmap.DeleteObject();