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