我在做技术内幕四版的243页的程序
在做的过程中
发现了其中有几个问题
能不能帮我说一下消息定义的过程
1.#define WM_USERAPPLY WM_USER+5
2.在DECLEAR_MESSAGE_MAP之前加 函数原型
3.映射用户定义的消息
4.实现用户定义的消息
出现错误:LNK2001: unresolved external symbol "private: void __thiscall CEx12aView::Format(struct _charformat &)" (?Format@CEx12aView@@AAEXAAU_charformat@@@Z)
Debug/ex12a.exe : fatal error LNK1120: 1 unresolved externals
能帮我讲一下消息定义的主意点吗?和比较通常的方法

解决方案 »

  1.   

    BEGIN_MESSAGE_MAP(CText1View, CView)
    //{{AFX_MSG_MAP(CText1View)
    ON_COMMAND(ID_GETDATA, OnGetdata)
    ON_COMMAND(ID_STOREDATA, OnStoredata)
    ON_UPDATE_COMMAND_UI(ID_STOREDATA, OnUpdateStoredata)
    ON_WM_CREATE()
    ON_WM_SIZE()
    ON_COMMAND(ID_FORMAT_DEFAULT, OnFormatDefault)
        //}}AFX_MSG_MAP
       ON_MESSAGE(WM_USERAPPLY,OnUserApply)就是到了这步就出错
    END_MESSAGE_MAP()
      

  2.   

    (1) 手工定义消息,可以这么写 
    #define WM_MY_MESSAGE(WM_USER+100), 
    MS 推荐的至少是 WM_USER+100 
     
    (2)声明消息
    afx_msg LRESULT OnMyMessage( WPARAM wParam, LPARAM lParam );
    (3)消息映射在cpp文件中的消息映射中加入:
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
        //{{AFX_MSG_MAP(CMainFrame)
            // NOTE - the ClassWizard will add and remove mapping macros here.
            //    DO NOT EDIT what you see in these blocks of generated code !
        ON_WM_CREATE()
        //}}AFX_MSG_MAP
        ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
    END_MESSAGE_MAP()
    (4)写消息处理函数,用 
    WPARAM,LPARAM返回LRESULT. 
    LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam) 

        temp目录: Use "GetTempPath"
        //加入你的处理函数 irectory"
    }
      

  3.   

    WM_USER+5 太小了,在WM_USER+100之内的,系统很可能会使用,当然会出错了,为保险起见,我看最好定义在WM_USER+150之后
      

  4.   

    我用RegisterWindowMessage,可是还是存在楼主遇到的问题。
    用RegisterWindowMessage应该不需要再#define了吧?
      

  5.   

    我用RegisterWindowMessage,应该不需要用#define了吧?可是还是会遇到和楼主一样的问题,真是猜不透了