想做个AUTOCAD那样的编辑栏,再窗口中输入命令,但是不允许用户用去修改命令提示和之前的已经执行了的命令行。即,编辑完一行命令,程序执行他了,在编辑栏中显示下一个命令的编辑光标,而以上的所有内容显示在那里,但是都不能改变。我想是修改视图的OnChar函数但是不太行,
如,
 void CmyView::OnChar(nChar,...)
{
     if (nChar==VK_DELETE||VK_BACKSPACE)
          return;
      CEditView::OnChar(nChar,...);
}
高手们能说一下吗??还有什么高招吗???谢谢谢谢

解决方案 »

  1.   

    void CmyView::OnChar(nChar,...)
         ~~~~~~~~怎么能是CView的事件呢?应该是一个editbox的吧
      

  2.   

    我是在一个从CEditView派生的视图类CMyView中操作的呀,没错的
      

  3.   

    不要用CEditView, 这样反而更麻烦,最好用CView并自己处理滚动,在视图客户区的下方生成一个与行同高、无bordor的Edit控件处理编辑工作
      

  4.   

    实际上你的CEditView根本得不到wm_char之类的消息,因为全部给它上面的edit control给评
    屏蔽了
    你需要定制一个edit然后对CEditView中的那个edit进行子类型化
      

  5.   

    不是的,在CMyView的OnChar 中如果用以下代码
        if (nChar=='a')
          return;
        CEditView::OnChar(...)
    还是可以不让字符a显示的
      

  6.   

    我做了一个,只要用到下面的东西,你copy过去就行了。void CEDITView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Add your message handler code here and/or call default
    switch(nChar)
    {
    case VK_UP:
    return;
    case VK_LEFT:
    {
    CEdit& edit=GetEditCtrl();
    int FirstChar=edit.LineIndex();
    CPoint pt=edit.GetCaretPos();
    int CharCur=LOWORD(edit.CharFromPos(pt));
    if(FirstChar==CharCur)
    return;
    }
    default:
         CEditView::OnKeyDown(nChar, nRepCnt, nFlags);
    }
    }void CEDITView::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    CEdit& edit=GetEditCtrl();
    int LineClicked=HIWORD(edit.CharFromPos(point));
    CPoint pt=edit.GetCaretPos();
    int LineCur=HIWORD(edit.CharFromPos(pt));
    if(LineClicked!=LineCur)
    return;
    CEditView::OnLButtonDown(nFlags, point);
    }void CEDITView::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    CEdit& edit=GetEditCtrl();
    int LineClicked=HIWORD(edit.CharFromPos(point));
    CPoint pt=edit.GetCaretPos();
    int LineCur=HIWORD(edit.CharFromPos(pt));
    if(LineClicked!=LineCur)
    return;
    CEditView::OnLButtonDblClk(nFlags, point);
    }
    void CEDITView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Add your message handler code here and/or call default
    if(nChar=='\b')
    {
    CEdit& edit=GetEditCtrl();
    int FirstChar=edit.LineIndex();
    CPoint pt=edit.GetCaretPos();
    int CharCur=LOWORD(edit.CharFromPos(pt));
    if(FirstChar==CharCur)
    return;
    }
    CEditView::OnChar(nChar, nRepCnt, nFlags);
    }