背景:本人一直学习的C#,前一阶段应导师吩咐接收一用C++,MFC编写的软件,对里面的工具栏图标的功能进行添加,看了好几本关于MFC编程的书,对其中的消息传递机制,以及点击工具栏图标后怎么调用相关的头文件,源文件的代码模糊不清。雾里看花。
   工具栏的功能:点击一个工具栏图标,比如一个开关,然后在客户区里面,拖动鼠标左键,松开左键后绘制一个图像。
   目前,我所了解到的知识:
    1.在工具栏图标上,打开类向导,为该图标添加COMMAND,UPDATE_COMMAND_UI命令,此两个命令在*View.cpp中实现,这样在运行后点击图标不至于是灰色禁用的。
    2.在*View.cpp中 有个OnDraw(CDC* pDC)可以绘图。    现在,我所做的工作,在工具栏上新建了一个图标,并为其添加了COMMAND,UPDATE_COMMAND_UI,而且新建了Switch.h和Switch.cpp文件,并在里面写好了相关的代码,其中绘图的代码分离出来测试已能正确画出图形。运行后也并无错误,点击工具栏开关图标,,在空白客户区,按下鼠标左键毫无反应,连一个虚矩形框都没有。
    我的问题是:
    1.定义了COMMAND,UPDATE_COMMAND_UI有什么用?实现绘图功能是在Switch.cpp中实现的。
    2.点击了图标后,COMMAND,UPDATE_COMMAND_UI命令是如何调用或者说是如何如Switch.h和Switch.cpp联系的,需不需要设置什么代码,如在*Doc.cpp,*View.cpp等,为什么点击了开关按钮而不去调用其他的代码,而一定要去调用Switch.h,Switch.cpp呢,我就怕是忘了设置什么映射,但是COMMAND,UPDATE_COMMAND_UI,消息的映射和声明已经做了。
      
  罗嗦这么多,不晓得大家明白了么,请各位大牛给点建议,解决方法,不胜感激~~~

解决方案 »

  1.   

    LZ对MFC的消息映射应该了解一些吧,一个消息响应函数要注意3处代码:
    1  .h头文件中声明,如:afx_msg void OnOperate();
    2  .cpp文件中的BEGIN_MESSAGE_MAP与END_MESSAGE_MAP 之间加消息映射,如:
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    //{{AFX_MSG_MAP(CMainFrame)
    ON_WM_CREATE()
    ON_COMMAND(IDM_OPERATE, OnOperate) //加上这句,IDM_OPERATE为工具条资源ID
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    3  .cpp文件中实现函数OnOperate
    void CMainFrame::OnOperate() 
    {
    // TODO: Add your command handler code here
    //添加新的代码
    }
    使用类向导时能自动生成
      

  2.   

    是的  找本MFC书看看吧  都有写怎么处理
      

  3.   

    你的绘图代码应该是与鼠标消息响应函数OnMouseMove关联,而不是COMMAND,在COMMAND中可以设置一个绘图开关