CView::OnDraw(CDC* pDC)如何用?(在线等待)
我编写了一个单文档处理程序,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()函数?




