怎样将改变了大小和颜色的标题栏文字固定上来

怎样将改变了大小和颜色的标题栏文字固定下来?
本帖最后由 VisualEleven 于 2013-01-09 13:21:30 编辑
各位大神们,我遇到了这样的问题,我改变了标题栏文字的大小和颜色,但是当从用鼠标点击程序界面之外的其他地方时,文字就会消失,请给出一个能够将文字固定下来的方法。我的代码如下:
void CSSQRandDlg::OnNcPaint() 
{
// TODO: Add your message handler code here
CDialog::OnNcPaint();
CDC *pDC = GetWindowDC();          //获取设备上下文
CString str="我的标题栏名称";
CFont vertFont;
//字体
vertFont.CreateFont(16, 6, 0, 0, FW_BOLD,    //第一个900表示旋转90度
0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH, "宋体");

CFont *pOldFont = pDC->SelectObject(&vertFont);
pDC->SetBkMode(TRANSPARENT);       //设置背景透明
pDC->SetTextColor(RGB(200,50,0));   //设置字体颜色
pDC->TextOut(30,6,str);  //输出文字,220横坐标,6纵坐标
pDC->DeleteDC();                   //释放设备上下文
pDC->SelectObject(pOldFont);
vertFont.DeleteObject();
// Do not call CDialog::OnNcPaint() for painting messages
}
期待大神们指教

------解决方案--------------------
试试:

BOOL CSSQRandDlg::OnNcActivate(BOOL bActive) 
{
  OnNcPaint();
  return CDialog::OnNcActivate(bActive);
}

void CSSQRandDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
{
  CDialog::OnActivate(nState, pWndOther, bMinimized);
  OnNcPaint();
}


另外,GetWindowDC()用ReleaseDC释放而不是DeleteDC

------解决方案--------------------
引用:
感谢1楼,可以了,但是新问题又出现了,
在win7系统上运行,标题栏上绘制的文字一个都没有。
再次请教一下这个问题怎么解决。

不同的风格主题下确实是有问题。最简单有效的方法就是利用客户端的一块区域来表示标题栏。