CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

CView::OnDraw(CDC* pDC)如何用?(在线等待)

楼主tjroamer(Cpp高手)2003-02-02 19:28:17 在 VC/MFC / 界面 提问

我编写了一个单文档处理程序,CView的两个成员函数如下:  
  void   CMfcSDocView::OnDraw(CDC*   pDC)  
  {  
  CMfcSDocDoc*   pDoc   =   GetDocument();  
  ASSERT_VALID(pDoc);  
  //   TODO:   add   draw   code   for   native   data   here  
  CString   str   =   pDoc->str;         //str字符串是在CDocument里面定义的。  
  pDC->TextOut(0,   0,   str);  
   
  }  
  void   CMfcSDocView::OnViewHaha()             //Haha是一个菜单名字。  
  {  
  CFontDialog   fdlg;  
   
  if   (fdlg.DoModal()   ==   IDOK)  
  {  
  CClientDC   pDC(this);  
  LOGFONT   lf;  
  fdlg.GetCurrentFont(&lf);  
  CFont   ft,   *oldFont;  
  ft.CreateFontIndirect(&lf);  
  oldFont   =   pDC.SelectObject(&ft);  
  OnDraw(&pDC);  
  }  
  }  
   
  然后运行程序,发现第二次显示的时候,并不是刷新显示,而是覆盖显示,就是说比如第一次是20号字体,而我选择了10号字体,会看到20号字体仍然存在,10号字体只是覆盖在了它上面,请问怎样才能刷新显示,谢谢! 问题点数:60、回复次数:12Top

1 楼AthlonxpX86(一坨屎)回复于 2003-02-02 19:52:05 得分 0

调用UpdateDate(FALSE);试试Top

2 楼kingcom_xu(冷羽)回复于 2003-02-02 20:01:07 得分 10

试试InvalidateRect..(我对这个不了解,只能说试试);  
  如果实在不行用FillRect把指定的区域用窗口的背景色填充...  
  呵呵Top

3 楼tjroamer(Cpp高手)回复于 2003-02-02 20:50:36 得分 0

好像这个是sdk的win32函数,并不是mfc的函数,有直接用mfc函数及消息实现的吗?Top

4 楼Jakecat(『钢筋混凝土』混进银行...)回复于 2003-02-02 21:56:11 得分 0

是的Top

5 楼deerchao(不跨浏览器/不符合标准不考虑)回复于 2003-02-02 22:18:31 得分 10

不对,我做了试验,不会重叠,只是又变为了默认大小!  
  我觉得,你应该在DOC类里存好你当前要用的FONT,在ONDRAW里取得此FONT,然后再TEXTOUT,就行了!!!!  
   
   
  试试吧!Top

6 楼zhaolaoxin()回复于 2003-02-03 18:03:39 得分 10

在函数OnViewHaha()中不需要调用OnDraw(),而是调用UpdateData();或Invalidate();Top

7 楼Mackz(在相互)回复于 2003-02-03 23:00:04 得分 10

在Doc类里保存字体,一般保存句柄HFONT,在OnDraw()里将字体选入DC,然后绘制字符串,然后释放字体,在OnViewHaha()中,改变字体,然后刷新,可以使用Invalidate()、InvalidateRect()、RedrawWindow()等函数实现。Top

8 楼Gozhhu(Gozhhu)回复于 2003-02-05 20:49:48 得分 10

void   CMfcSDocView::OnViewHaha()             //Haha是一个菜单名字。  
  {  
  CFontDialog   fdlg;  
   
  if   (fdlg.DoModal()   ==   IDOK)  
  {  
  CClientDC   pDC(this);  
  LOGFONT   lf;  
  fdlg.GetCurrentFont(&lf);  
  CFont   ft,   *oldFont;  
  ft.CreateFontIndirect(&lf);  
  oldFont   =   pDC.SelectObject(&ft);  
  >>>>>>>>>Invalidate();   //using   OnDraw(CDC*)  
  }  
  }Top

9 楼fireflysduio(菜刀)回复于 2003-02-06 22:23:53 得分 0

SendMessage(ON_PAINT)Top

10 楼rainlight(蓝色的海)回复于 2003-02-07 09:55:14 得分 0

Invalidate();Top

相关问题

  • 关于OnDraw(CDC *pDC)
  • 如何在 Dialog Application 中用 OnDraw(CDC* pDC)?
  • 求救!!!如何获得OnDraw(CDC *pDC)中的pDC
  • ===>>>送分问题===>>>OnDraw(CDC* pDC)在什么时候调用?===>>>请进===>>>
  • void CEx10cView::OnDraw(CDC* pDC)中,CDC* 指的是哪一种设备环境?
  • CDC *pDC 问题
  • 怎样得到象OnDraw里CDC *pDC那样的包含设备上下文的CDC
  • OnPaint()与OnDraw(*CDC)区别?
  • 我定时用OnDraw(CDC *pDC)画了图,并把这个图保存在bmp文件中.可是我程序最小化时,图该怎么画???????
  • 怎样调用CView::OnDraw()函数?

关键词

  • 字体
  • 函数
  • fdlg
  • ondraw
  • onviewhaha
  • pdc
  • oldfont
  • ft
  • lf
  • cdc

得分解答快速导航

  • 帖主:tjroamer
  • kingcom_xu
  • deerchao
  • zhaolaoxin
  • Mackz
  • Gozhhu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo