我在一对话框里定义了CMyEdit* m_pEdit;此属于CeditDlg类
CMyEdit是CEdit的派生类//CeditDlg.h
CMyEdit* m_pEdit;
....
//CMyEdit.h
class CMyEdit : public CEdit
{
....
}我想在回车后处理m_pEdit的值,我是应该在PreTranslateMessage重载函数里获得并处理 Cedit的值?还是在 CeditDlg里,
BOOL CMyEdit::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类 if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_RETURN)
{
                       .....//这里该怎么写????
return true;
}
} return CEdit::PreTranslateMessage(pMsg);
}在省略号的地方我尝试了:
1:CeditDlg::getNewEditValue();//替换省略号的位置
 //以下是函数定义
void CeditDlg::getNewEditValue()
{
m_pEdit->GetWindowText(newEditValue);
return;
}2.创建一CeditDlg指针,来获得m_pEdit的值。但两种方法都出现了问题~
所以请教高人,我想这应该是 在两个类之间传递参数的问题!但不敢确定,望高人指点一二!!!谢谢

解决方案 »

  1.   

    在CeditDlg里响应回车键盘,然后m_pEdit->GetWindowText(newEditValue); 
    出现什么问题?
      

  2.   

    1、可以试试直接重载对话框的OnOk(与点击“确定”按钮相同)函数,然后使用GetDlgItemText(编辑框的ID值)函数就能取得编辑框的值。这样可以不用重载CEdit类。2、在CEditDlg中定义一个Public变量,保存EDIT的值。
    Public:
       CString m_strEdit;void CEditDlg::OnOk()
    {
       m_strEdit = GetDlgItemText(IDC_EDIT);
    }然后在打开对话框的地方:
    CEditDlg EditDlg;
    EditDlg.DoModal();
    CString strReturn = EditDlg.m_strEdit;
      

  3.   

    这句倒是 没出问题,出问题的是在CMyEdit类里调用getNewEditValue() 
    函数的时候,
    1.如果这样调用CeditDlg::getNewEditValue();调试错误:error C2352: “CeditDlg::getNewEditValue”: 非静态成员函数的非法调用
       如果把定义函数改为 static  void  getNewEditValue() ; 
    调试错误:
     : error C2227: “->GetWindowTextA”的左边必须指向类/结构/联合/泛型类型
     : error C2597: 对非静态成员“CeditDlg::newEditValue”的非法引用
    2.
    在相应回车里改为
    CeditDlg *tempEdit =new  CeditDlg;
    想tempEdit ->getNewEditValue();
    但是获得的值就应该变了吧,因为又创建了个新的指针tempEdit,而不是原先的
      

  4.   

    对于二楼所说,与我所碰到的问题,我想应该有点出入,我把图片附上,我的本意就是在回车的时候自动切换好下一列,如果是最后一列则切换到下一行,CEdit正好覆盖掉每个单元格~
      

  5.   

    如果是让CListCtrl控件的其它列也能编辑,则可以查看以下的文章:http://www.codeguru.com/cpp/controls/listview/editingitemsandsubitem/article.php/c4175/
      

  6.   

    CMyEdit你还调用getNewEditValue?直接调用GetWindowText不就可以了?
      

  7.   

    6楼说的极是,我犯傻了,本来都是自己类的函数直接调用就行了,哎,我怎么还在想创建对象调用。现在是获得了Cedit的值,我怎么让cedit转到下一列?还得转到CeditDlg 里处理吧,因为获得行列的宽度都是在那里。一会给你分