ondraw的pdc->textout() 可不可以在其他类中调用cview的ondraw函数,利用pdc->textout(……)来改变视图的显示内容!(在原来的内容上增加东西) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以传个pDC的地址过去void InitBackGround(CRect picrect, CDC *pDC);//例如CDC *pDC这个参数 在cview里写一个函数void Fun(){CDC *pDC = GetDC();pDC->TextOut();ReleaseDC(pDC);}在其他类中调用这个函数就行了 如果在按钮的onok事件里添加如下的代码为和不行?void CAboutDlg::OnOK() { CVvView* theApp=new CVvView; CDC* pDC=theApp->GetDC(); pDC->TextOut(200,200,"HELLO"); CDialog::OnOK();}还有如果按照ninsenki说的写成函数的,然后再其他类中调用,为什么还是出现错误void CVvView::Fun(int x, int y, char str[]){ CDC *pDC = GetDC(); pDC->TextOut(x,y,str); ReleaseDC(pDC);}void CAboutDlg::OnOK() { // TODO: Add extra validation here CVvView* theApp=new CVvView; theApp->Fun(200,300,"HELLO"); CDialog::OnOK();} 楼主你厉害,这样的代码也写得出!CVvView* theApp=new CVvView;此时VIEW还没创建出来。还要theApp->Create(...)。 对楼主的敬佩犹如长江之水,滔滔不绝啊否定,其它类中调用视图类的OnDraw,有人驳斥我该打屁股100大板废话,如果要在OnDraw中显示必定是不能被擦除的,那么你尽量使用bool 变量控制好了! 我在 CVvView中定义了一个全局变量CVvView* theApp 并在CVvView中的构造函数中对其赋值为 theApp=this ,然后在需要用的地方申明为extern,再用theApp->Fun(200,300,"HELLO");好象就可以了,不知道各位大虾对此有何异议?此法妥当不妥当? CVvView::Fun(int x, int y, char str[]){ CDC *pDC = GetDC(); pDC->TextOut(x,y,str); ReleaseDC(pDC);}void CAboutDlg::OnOK() { // TODO: Add extra validation here //对话框To视图数据交互(SDI为例) CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针 CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针 theApp->Fun(200,300,"HELLO"); CDialog::OnOK();}需要在CAboutDlg包含下列头文件:#include "MainFrm.h"#include "CVvDoc.h"#include "CVvView.h" 这样的方法是行但是,当窗口变化之后(最大化或最小花之类)原先显示的hello就消失了,不知这个该怎么解决? 首先要把变量保存起来,才能使OnDraw()响应重绘.也就是说,要把传到Fun()函数的坐标和字符串保存起来.CVvView::Fun(int x, int y, char str[]){ CDC *pDC = GetDC(); xx = x;//保存到视图类中的变量 yy = y;//同上 str1 = str;//同上 pDC->TextOut(x,y,str); ReleaseDC(pDC);}void CAboutDlg::OnOK() { // TODO: Add extra validation here //对话框To视图数据交互(SDI为例) CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针 CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针 theApp->Fun(200,300,"HELLO"); CDialog::OnOK();}在OnDraw()加入:pDC->TextOut(xx,yy,str1);当然,其实不用这样搞的,举例而已~~~ 请问“lambochan”,你说“其实不用这样搞的”,请问还有什么其他方法? 举个例子吧:在OnDraw()加入:pDC->TextOut(xx,yy,str1);void CAboutDlg::OnOK() { // TODO: Add extra validation here //对话框To视图数据交互(SDI为例) CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针 CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针 theApp->xx = 200;//传到视图变量中 theApp->yy = 300;//同上 theApp->str1 ="HELLO";//同上 theApp->Invalidate();//使客户区无效 theApp->UpdateWindow();//发送WM_PAINT消息,重画客户区. CDialog::OnOK();}其实就是把绘制代码或显示的代码放在OnDraw(),know? 补充一句: 你喜欢怎样搞就怎样搞,哪样方便就搞哪样~~ 要使视图能重绘,必须在OnPaint()或OnDraw()加入相应代码,否则,被刷新后就不见了,kaka~~ 老兄,你想想也能明白阿,如果在about里边画了视图出来的时候OnDraw()他不就没了么!!!:) 关于界面问题的提问 一个困扰我一个星期嘀VC编译问题,,请高手帮我点破原因? 关于Rand()函数产生大值随机数的问题。 怎样给一个已经显示的位图上添加文本? 程序在本地可运行,其他机子则无任何反应 新手上路! 哪里有音频格式大全 XtremeToolkit 和bcg哪个更好一些?? 如何通过进程ID找出该进程的程序绝对路径? 如何判断一个字符串为数字? winsock control控件小问题(50分) 我的界面上有一个Progress控件,我想在不需要用它时,将它完全隐藏(界面上看不到边框),怎么做?
传个pDC的地址过去
void InitBackGround(CRect picrect, CDC *pDC);//例如CDC *pDC这个参数
void Fun()
{
CDC *pDC = GetDC();
pDC->TextOut();
ReleaseDC(pDC);
}
在其他类中调用这个函数就行了
{
CVvView* theApp=new CVvView;
CDC* pDC=theApp->GetDC();
pDC->TextOut(200,200,"HELLO");
CDialog::OnOK();
}
还有如果按照ninsenki说的写成函数的,然后再其他类中调用,为什么还是出现错误void CVvView::Fun(int x, int y, char str[])
{
CDC *pDC = GetDC();
pDC->TextOut(x,y,str);
ReleaseDC(pDC);
}void CAboutDlg::OnOK()
{
// TODO: Add extra validation here
CVvView* theApp=new CVvView;
theApp->Fun(200,300,"HELLO");
CDialog::OnOK();
}
此时VIEW还没创建出来。还要theApp->Create(...)。
好象就可以了,不知道各位大虾对此有何异议?此法妥当不妥当?
{
CDC *pDC = GetDC();
pDC->TextOut(x,y,str);
ReleaseDC(pDC);
}void CAboutDlg::OnOK()
{
// TODO: Add extra validation here
//对话框To视图数据交互(SDI为例)
CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针
CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针
theApp->Fun(200,300,"HELLO");
CDialog::OnOK();
}
需要在CAboutDlg包含下列头文件:
#include "MainFrm.h"
#include "CVvDoc.h"
#include "CVvView.h"
CVvView::Fun(int x, int y, char str[])
{
CDC *pDC = GetDC();
xx = x;//保存到视图类中的变量
yy = y;//同上
str1 = str;//同上
pDC->TextOut(x,y,str);
ReleaseDC(pDC);
}void CAboutDlg::OnOK()
{
// TODO: Add extra validation here
//对话框To视图数据交互(SDI为例)
CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针
CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针
theApp->Fun(200,300,"HELLO");
CDialog::OnOK();
}在OnDraw()加入:pDC->TextOut(xx,yy,str1);
当然,其实不用这样搞的,举例而已~~~
在OnDraw()加入:pDC->TextOut(xx,yy,str1);void CAboutDlg::OnOK()
{
// TODO: Add extra validation here
//对话框To视图数据交互(SDI为例)
CMainFrame *pFrame = (CMainFrame *)GetParent();//获取框架窗口指针
CVvView* theApp =(CVvView *)pFarme->GetActiveView();//获取视图指针
theApp->xx = 200;//传到视图变量中
theApp->yy = 300;//同上
theApp->str1 ="HELLO";//同上
theApp->Invalidate();//使客户区无效
theApp->UpdateWindow();//发送WM_PAINT消息,重画客户区.
CDialog::OnOK();
}其实就是把绘制代码或显示的代码放在OnDraw(),know?
你喜欢怎样搞就怎样搞,哪样方便就搞哪样~~
要使视图能重绘,必须在OnPaint()或OnDraw()加入相应代码,否则,被刷新后就不见了,kaka~~