本帖最后由 xiao_dong_dong 于 2014-09-18 10:37:16 编辑

解决方案 »

  1.   

    这个我觉得你不应该有疑问啊,消息是谁发送给谁,你自己居然不清楚?接收消息者,要实现消息响应函数啊。
    你这个SetButton是谁的函数呢?
    应该是CWatch发送给主窗口,因为CWatch不是个窗口类吧,不具备消息循环,只能向外发送消息,所以需要主对话框响应
      

  2.   

    CWatch也是窗口类class CWatch: public CWnd
      

  3.   

    BOOL CWatch::Create(CWnd *pWnd, WORD nData1 , WORD nData12, WORD nData13)
     {m_pWnd = pWnd;}
    你的Create是谁调用的,假设是窗口A(可能就是主窗口),这里就是把主窗口的窗口指针传给了m_pWnd,
    ::SendMessage(m_pWnd->GetSafeHwnd(),WM_SENDDATA,mID,0);
    第一个参数就是你消息要发送给的窗口,即你在Create中传进来的窗口A
      

  4.   

    CWatch也是窗口类class CWatch: public CWnd
    CWatch也是一个窗口类,在CWatch类里发送消息,消息的指针是指向CWatch类的,所以,我觉得消息处理也应该在CWatch类里完成,但是程序对该消息的响应是写在主对话框类,所以就不知道是怎么回事了
      

  5.   

    BOOL CWatch::Create(CWnd *pWnd, WORD nData1 , WORD nData12, WORD nData13)
     {m_pWnd = pWnd;}
    从这可以看出,m_pWnd指向的是主窗口
    ============
    函数SendButton()
    {
    ::SendMessage(m_pWnd->GetSafeHwnd(),WM_SENDDATA,mID,0);
    }
    从这行数可以看出,消息是发送给m_pWnd,即主窗口的,当然是主窗口响应了。这还有什么问题吗?真是搞不明白。
      

  6.   

    BOOL CWatch::Create是CWatch的窗口创建函数,原型是virtual BOOL Create
      

  7.   


    BOOL CWatch::Create(CWnd *pWnd, WORD nData1 , WORD nData12, WORD nData13)
     {m_pWnd = pWnd;}
    这个Create不是CWatch的窗口创建函数吗?所以pWnd不应该指向CWatch?为什么是指向主窗口呢
    哎,就是纠结这个问题,没弄明白啊
      

  8.   

    你找一下源头好吗?你这个CWatch的Create函数,是哪里调用的?第一个参数是从哪里来的?你不查,光在这儿犯晕。自己给自己发消息,傻啊
      

  9.   

    你骂的我都不敢说话了
    我不是说了CWatch的Create是窗口创建函数,是虚函数,创建的方法是:给CWatch类重写虚函数Create
      

  10.   

    你说class CWatch: public CWnd 
    好,那么CWnd的虚的Create函数的参数有哪些? 是你的这个吗?
    BOOL CWatch::Create(CWnd *pWnd, WORD nData1 , WORD nData12, WORD nData13)
    我怎么不相信呢?CWnd类还会做这种函数?这必然是自己封装的吧。
      

  11.   

    CWnd的Create函数原型是:
    virtual BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);和你的这个所谓的Create函数没半毛钱关系
      

  12.   

    应该是:你的Create里调用了CWnd默认的Create,然后外部调用你这个Create函数,初始化了几个变量