当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 若是在上海找工作,应在哪里租房子? 有哪些上海比较热门的人才站点? 在上海一般开销大概多少费用/月? tks. ......
 ·opera如何支持xml    »显示摘要«
    摘要: rt! ......


文本显示问题

我想在窗口客户区显示当前时钟,在一秒定时器OnTimer()中处理:  
  void   CClockDlg::OnTimer(UINT   nIDEvent)    
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
  switch(nIDEvent)  
  {  
  case   1:  
  //定义DC  
  CClientDC   ClientDC(this);  
   
  SYSTEMTIME   curtime;  
  //获取本地时间  
  ::GetLocalTime   (&curtime);  
   
  CString   TimeStr;  
  //格式化时间  
  TimeStr.Format   ("%02d:%02d:%02d",curtime.wHour   ,  
  curtime.wMinute   ,curtime.wSecond   );  
   
  //创建新字体  
  CFont   NewFont;  
  CFont   *pOldFont;  
  int   pointsize=12;  
  int   logicalinch=ClientDC.GetDeviceCaps   (LOGPIXELSY);  
  int   fontheight=::MulDiv   (pointsize,logicalinch,72);  
  NewFont.CreateFont   (fontheight,0,0,0,FW_BOLD,FALSE,  
                            FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,  
                                              CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,  
                                              DEFAULT_PITCH| FF_DONTCARE,"宋体");  
  pOldFont=ClientDC.SelectObject   (&NewFont);  
   
  //显示时间,日期  
  ClientDC.SetBkMode   (TRANSPARENT);  
  ClientDC.SetTextColor   (RGB(0,0,0));  
   
  ClientDC.TextOut   (0,0,TimeStr);  
   
  //选入旧字体  
  ClientDC.SelectObject   (pOldFont);  
   
  break;  
  }  
  CDialog::OnTimer(nIDEvent);  
  }  
  程序运行后,为何随着秒的变化,显示的变化文本都叠加在一起,比如:上一秒显示“21:30:11”,本次显示“21:30:12”,本次的12显示出来了,可上次11没有擦除。  
  我在开头加入两句:  
  Invalidate();  
  UpdateWindow();  
  虽然显示正常了,但会有闪烁,请问如何解决?

NO.1   作者: bllb007

InvalidataRect(CRect   &)

NO.2   作者: JennyVenus

//创建新字体  
  CFont   NewFont;  
  CFont   *pOldFont;  
  int   pointsize=12;  
  int   logicalinch=ClientDC.GetDeviceCaps   (LOGPIXELSY);  
  int   fontheight=::MulDiv   (pointsize,logicalinch,72);  
  NewFont.CreateFont   (fontheight,0,0,0,FW_BOLD,FALSE,  
                            FALSE,FALSE,DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,  
                                              CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,  
                                              DEFAULT_PITCH| FF_DONTCARE,"宋体");  
  pOldFont=ClientDC.SelectObject   (&NewFont);  
   
  //显示时间,日期  
  ClientDC.SetBkMode   (TRANSPARENT);  
  ClientDC.SetTextColor   (RGB(0,0,0));  
   
  ClientDC.TextOut   (0,0,TimeStr);  
   
  //选入旧字体  
  ClientDC.SelectObject   (pOldFont);  
  -----------------------  
  1)在外部声明字体,然后在这里引用就行了,不用每次都设置  
  2)画一个矩形擦除原先的文字。

NO.3   作者: In355Hz

重载   WM_ERASEBKGND   ,   直接返回,   防止窗体重绘背景


    摘要: 比如:找个红色的区域,函数返回hrgn ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE