注册 登录
编程论坛 VC++/MFC

关于对话框中的编辑框显示的问题

guandekun53 发布于 2013-05-17 20:44, 2056 次点击
请教各位高人,上次的编辑框问题还是没有解决,按版主的方法,消息能映射过去,编译也通过但运行时却报告错误,问题是显示内容映射到函数后,找不到编辑框的句柄.程序的结构如下,请哪位高人帮忙看看错在哪里,先谢过.
class CShuruDig : public CDialog
{
// Construction
public:
    CString m_num;
    CShuruDig(CWnd* pParent = NULL);   // standard constructor
//    friend class CZhiDig;
    //{{AFX_DATA(CShuruDig)
    enum { IDD = IDD_DIALOG2 };
    CEdit    m_edit;
    //}}AFX_DATA


// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CShuruDig)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:

    // Generated message map functions
    //{{AFX_MSG(CShuruDig)
    afx_msg void OnDestroy();
public:
    afx_msg void OnNum(UINT uID);            //消息显示函数定义,编辑框所在的对话框
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

};
=======================================================
void CShuruDig::OnNum(UINT uID)            //消息显示函数
{                                           //字符串可以从下面的对话框映射到程序的这里.
    UINT index=uID-IDC_BUTTON1;
    //CString num;
    m_num.Format(_T("%d"),index);
//    AfxMessageBox(num);

    m_edit.SetWindowText(m_num);            //程序执行到这步后报错,查了发现编辑框的句柄hwnd=0.
//     SetText(m_num);                        //不知到问题究竟出在哪里,而且找了很久好象编辑框的数据显示
}                                            //就只有这个函数,还有其他方法吗?
===================================================================================
 BEGIN_MESSAGE_MAP(CZhiDig, CDialog)        //这段程序和上面两段分别属于两的对话框
    //{{AFX_MSG_MAP(CZhiDig)
    ON_WM_DESTROY()
//    ON_CONTROL_RANGE(BN_CLICKED,IDC_BUTTON1,IDC_BUTTON18,CShuruDig::OnNum)
    //}}AFX_MSG_MAP
    ON_CONTROL_RANGE(BN_CLICKED,IDC_BUTTON1,IDC_BUTTON18,CShuruDig::OnNum)    //消息映射
END_MESSAGE_MAP()
/*
谢谢!
3 回复
#2
yuccn2013-05-18 20:25
把程序发出来把,我帮你改下
#3
guandekun532013-05-19 20:24
版主你好:谢谢你的指点,按你上次讲的方法,现在消息可以映射到处理函数,但是编译也正确程序也可以运行,但就是数据不能在编辑框里显示。我查了下,发现在消息传递的时候把映射函数所在的对话框的句柄也带到处理函数了,这种情况我不知道该如何处理。程序大致如下:
==============================================================================================
BEGIN_MESSAGE_MAP(CZhiDig, CDialog)           //消息影射函数在第1个对话框的类中(CZhiDig)定义,编辑框在第2
    //{{AFX_MSG_MAP(CZhiDig)                   //个对话框(CShuruDig中                                      
    ON_WM_DESTROY()
 
    //}}AFX_MSG_MAP
    ON_CONTROL_RANGE(BN_CLICKED,IDC_BUTTON1,IDC_BUTTON18,CShuruDig::OnNum)    //控件范围映射消息函数
END_MESSAGE_MAP()
===============================================================================================
void CShuruDig::OnNum(UINT uID)    //消息处理函数和编辑框在第2个对话框中,第2个对话框上的按键
{                                  //的值可以在这里显示,
    UINT index=uID-IDC_BUTTON1;
      m_num.Format(_T("%d"),index);
     
//    HWND hWnd=(HWND)(CShuruDig::m_edit);
    CShuruDig::SetDlgItemText(IDC_EDIT2,m_num);        //按键值显示函数,第1个对话框上的按键
//    ::ShowWindow(IDC_EDIT2);                        //通过消息可以传递到这里,但hWnd 始终是
 }                                                    //CZhiDig类的,以至于编辑框的句柄=0。
                                                      //所以第1个对话框的键值就显示不出来了。
象这种问题要怎样才能把第2个对话框的句柄传递给消息处理函数呢?
恳清版主不吝赐教。谢谢!
#4
guandekun532013-05-19 20:28
刚才忘了讲:IDC_EDIT2是编辑框的ID。
1