CEditView类难道就如此特殊?

zhdleo 2002-12-18 11:42:50
对于切分后窗口,都是要指向一个View类--假设为CLeftView,
我发现一个怪怪的问题:
如果这个视图类的基类指向的是一个CEditView类,
那么在这个CLeftView类的OnDraw函数里输出些东西,
比如:一个字符传,就根本不会显示。

可是如果这个视图类CLeftView的基类为CView或是CScrollView的
话,同样输出一个内容,就可以显示!

真的让人很奇怪!
难道CEditView类有什么特殊的地方,我平常并没有注意到?

谁给说说是什么原因?
...全文
172 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhdleo 2002-12-18
  • 打赏
  • 举报
回复
不行呀!
编译是通过了,能运行。

但什么都没有显示。

void CMyLeftView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
CEdit& theEdit = this->GetEditCtrl();
theEdit.SetWindowText("!!!!!!!!!");
}

难道不对,?
GoogleGeek 2002-12-18
  • 打赏
  • 举报
回复
楼主
你怎么老做些分隔视图的程序!----不太符合界面规范的
zhdleo 2002-12-18
  • 打赏
  • 举报
回复
楼上,谢谢你的 方法!我马上去试试。

能不能这样理解:在这个CEditView创建一个别的类型view 对象,
通过转化使用!
GetEditCtrl()可以在一个CEditView得到CEdit。
那其他的呢?
比如:CSrollView里可就没有什么GetEditCtrl()。
怎么得到CEdit,,有类似GetEditCtrl的函数吗?
---------------------------------------------------

zhaolaoxin() 你说的:
CEditView不需要用到OnDraw()函数,直接针对CEdit控件操作。
怎么理解!我还是有些迷糊!

比如说我打开一个文件,要把内容显示在里面,不用在OnDraw()函数里写东西吗????
EetyChen 2002-12-18
  • 打赏
  • 举报
回复
看看CEditView的代码你就可以知道,其实在CEditView类中,内容的显示不是在OnDraw中,而是在ReadArchive中用SetHandle之类的函数来解决的
isdong 2002-12-18
  • 打赏
  • 举报
回复
CEdit& theEdit = GetEditCtrl();
theEdit.SetWindowText(str);
zhaolaoxin 2002-12-18
  • 打赏
  • 举报
回复
CEditView不需要用到OnDraw()函数,直接针对CEdit控件操作。
zhdleo 2002-12-18
  • 打赏
  • 举报
回复
如果真是这样的话,

那我就只能去改基类了,

那问题就更来了,因为里面有些只基于CEditView类的函数都不能再用了,
那可怎么是好???
zhdleo 2002-12-18
  • 打赏
  • 举报
回复
改了半天,就谁这最后的了:
----------------------------------------------------------
LRESULT CHexView::OnFindHexMessage(WPARAM wParam, LPARAM lParam)
{
CFindReplaceDialog* pDlg = CFindReplaceDialog::GetNotifier(lParam);
ASSERT(pDlg != NULL);

if (pDlg->IsTerminating())
{
pDlg = NULL;
this->bHexFirstSearchTime = TRUE;
}
else if ( pDlg->FindNext() )
{
if(bHexFirstSearchTime == TRUE)
{
CEdit &editCtrl=this->GetEditCtrl();
editCtrl.SetSel(0,0);//将搜寻起点设置在cedit 得开始部分
//由于现在的视图类CHexView的基类是CScrollView,
//上面两句就无法使用了,怎么解决???

//而且下面的FindText()也无法使用了,怎么办?
if(!FindText(pDlg->GetFindString(),TRUE,FALSE)) { this->bHexFirstSearchTime = TRUE;
//OnTextNotFound(pDlg->GetFindString());
MessageBox("FIND Have reached the END,Cann't find it!");
}
else
{
this->bHexFirstSearchTime=FALSE;
}
}
else
{ //下面同理
if(!FindText(pDlg->GetFindString(),TRUE,FALSE)) { this->bHexFirstSearchTime = TRUE;
//OnTextNotFound(pDlg->GetFindString());
MessageBox("FIND Have reached the END,Cann't find it!");
}
else
{
this->bHexFirstSearchTime=FALSE;
}
}
}
return 0;
}

-----------------------------
谁给出个主意呀?
zhdleo 2002-12-18
  • 打赏
  • 举报
回复
直接用了个:
this 是CSrollView类!
((CEdit*)this)->SetSel(0,0);
不知道。。。。。。
zhdleo 2002-12-18
  • 打赏
  • 举报
回复
改了半天,有点进展,

现在需要知道一个东西,

就是;
原来基类是CEditView时,查找里面做的一个设置到内容开始的部分
CEdit &editCtrl=this->GetEditCtrl();
editCtrl.SetSel(0,0);
当基类改变,不在是CEditView,而成了CSrollView的话,
就不能用this->GetEditCtrl();,
因为可没有CSrollView::GetEditCtrl().

不知道CSrollView下,有没有和GetEditCtrl功能一样的函数!

知道的可一定要说呀。:)
GoogleGeek 2002-12-18
  • 打赏
  • 举报
回复
too easy!
---------------------------
对于CEditView,不要再onDraw里画图,没有用的!
直接
pView->SetWindowText(str);
就ok了
-----------------------------------------------

CFrameWnd *pFrame=(CFrameWnd*)AfxGetMainWnd();
CView *pView=pFrame->GetActiveView();

if(pView)
{
pView->GetDocument()->SetModifiedFlag();
pView->SetWindowText(strCommandResult);
CEdit &editCtrl=((CEditView*)pView)->GetEditCtrl();
editCtrl.SetSel(0,0);
int linecount=editCtrl.GetLineCount();
editCtrl.LineScroll(linecount);//滚动视图到行尾
}
zhdleo 2002-12-18
  • 打赏
  • 举报
回复
我把我的作完了,交给同学完成剩下的打开文件分别到左右视图。

他说我的View的基类不对,有些问题,

我看了,就是我上面 说的,我现在只好找解决办法了。。。。。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧