是一个与图书有关的软件,我在 edit box输入书号(isbn)回车,即触发查询,等。
1。我现在用cedit en_change的事件触发,但是必须把cedit属性设置了多行和autovscroll的属性才触发,但是,这样的结果焦点备移到了下一行,看不到录入的书号了,我不想让他移到下一行,也不想改触发时机,该怎么办?
2。我于是换了触发时机,我加了一个自定义的CMyedit类,继承CEdit,定义了Onchar的事件,并且定义了成员变量与该控件关联,回车事件是触发了,但是原来的程序的函数都是定义在CView的视图类中,我在CMyedit类中调用CView类的方法告诉我错误,我怎么能调用CView的方法?

解决方案 »

  1.   

    你可以在编辑框父窗口的PreTranslateMessage()中拦截编辑框的WM_CHAR消息,判断是回车的时候调用相应查询函数。
      

  2.   

    有例子吗(Mackz),单位要改VC的程序我晕了,
      

  3.   

    1、不用设置autovscroll,设置为“Want Return”看看;2、运用自定义消息,当回车事件触发时,向CView发这个消息,然后在视图中映射这个消息,执行查询。
      

  4.   

    在CMyedit实现你需要的功能,在CView中调用啊 而且你在CMyedit中将成员变量与该控件关联,不符合面向对象吧
      

  5.   

    (1) BOOL CMyedit::PreTranslateMessage(MSG* pMsg) //重载该虚函数
    {
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message == WM_KEYDOWN)
    {
    if (pMsg->wParam == VK_RETURN)
    {
    AfxMessageBox(_T("11"));//调用你想用的函数
                       return TRUE;
    }
    } return CEdit::PreTranslateMessage(pMsg);
    }
    2 先确定你的view和 CMyedit 是什么关系 传递 view 的指针到 CMyedit  里面就可以调用 view 的函数了
      

  6.   

    很简单啊,在C...View::PreTranslateMessage(MSG* pMsg)中:
    if ((pMsg->hwnd == m_Edit.GetSafeHwnd()) // 假定m_Edit是和控件绑定的CEdit型变量,或者通过控件ID判断:if ((::GetDlgCtrlID(pMsg->hwnd) == IDC_EDITID)
          && (pMsg->message == WM_CHAR)
          && (pMsg->wParam == VK_RETURN))
    {
        Query(); // 视图类的成员查询函数
        return TRUE;
    }
      

  7.   

    D:\分拣线程序\fjvc_ych\SWJView.cpp(2589) : error C2509: 'PreTranslateMessage' : member function not declared in 'CSWJView'
    mackz我用你的代码报这个错误,谢谢
      

  8.   

     (1)不好意思,5楼,借用一下你的代码。 BOOL CMyedit::PreTranslateMessage(MSG* pMsg) //重载该虚函数
    {
    // TODO: Add your specialized code here and/or call the base class
    if (pMsg->message == WM_KEYDOWN)
    {
    if (pMsg->wParam == VK_RETURN)
    {
    AfxMessageBox(_T("11"));//调用你想用的函数
                      return TRUE;
    }
    }
    return CEdit::PreTranslateMessage(pMsg);
    }
    说明一下:这是个虚函数,主要是用于在消息传递给窗口之前截获你想要处理的消息。像楼主这种情况,最好是
    在这个函数中处理。
    没有添加函数声明。你可在类视图中在CMyEdit上点击右键,选择“Add virtual function”来自动生成函数声明。(2)在CMyEdit中调用视图类的方法可以这样写:CMyView *pView = (CMyView*)(AfxGetMainWnd()->GetActiveView());
    再用这个pView去调用CMyView类的函数就可以了。
      

  9.   

    在CSWJView类中添加一行:
    virtual BOOL PreTranslateMessage(MSG* pMsg);