我定义了一个对话框,在上面架了一个按钮。我想一按这个键,就发出一个我自定义的一个消息。具体是这样的:
我在对话框类里定义了一个消息:#define WM_USERMSG WM_USER+5,还有一个CView指针(全局)用于调用SendMessage(WM_USERMSG),在我定义的按钮的响应函数里我就是
SendMessage.
然后在MyView的头文件里,在 DECLARE_MESSAGE_MAP()之前,添加了 afx_msg LRESULT OnUserMsg(WPARAM wParam,LPARAM lParam);在实现文件(CPP)里,在END_MESSAGE_MAP()前,添加了 ON_MESSAGE(WM_USERMSG,OnUserMsg)。
最后在MyView里编写消息相应函数:LRESULT CMydrawView::OnUserMsg(WPARAM wParam,LPARAM lParam)
程序编译通过,可是运行以后,一按按钮就出现错误,退出了。
请问各位,以上几步有没有问题呢?
请各位帮帮忙!
还有,请问在对话框的静态控件(如picture)上,是否能通过OnMouseMove检测到鼠标在Picture上呢?

解决方案 »

  1.   

    还有一个CView指针(全局),在调用它的SendMessage()前赋值了吗?出什么错?可以跟进去调试吗?
      

  2.   

    可以跟进去调试,unhandle error
      

  3.   

    把代码发给我看看,[email protected]
      

  4.   

    问题出在userMsg.cppCView* g_pView;    // 这里有问题1.首先,你定义了一个指针却没有给他分配空间;
    2.更重要的是,CView是一个抽象类,不可能用来实例化的,请自己看看
        MFC Class Hierarchy其他的我还在研究中!
      

  5.   

    上面忘记说了,出错的地方就在 g_pView->SendMessage(WM_USERMSG);
      

  6.   

    我定义g_pView是为了调用CView的函数SendMessage,这样行不通啊?
      

  7.   

    成员变量和虚函数表指针是保存在类的实例中的,因此调用之前g_pView必须指向实际的对象.
      

  8.   

    用((CMainFrame*)AfxGetMainWnd())->GetActiveView()代替g_pView就行了。
    g_pView在这里没有分配内存,没有成员变量和虚函数表指针,它必须是个实例才行,而CView是个抽象类,是不行的。