一个类里响应消息的问题

polosheng 2002-07-28 01:35:48
我希望我的类里能响应UI的消息,不知有没有大虾有这方面的简单的例子,发个我:polosheng@yeah.net谢谢
我自己写了个很简单的类,希望这个类能响应WM_LBUTTONDOWN,编译过了,但总不能响应,不知何故,请大家指教了
另外,我是在CWinapp 的派生类里加一个成员变量,在它InitInstance时,new一个自定义类

------------------------------------------------------------------------
#if !defined(AFX_MYMSG_H__F9CB9441_F91B_11D1_8610_0040055C08D9__INCLUDED_)
#define AFX_MYMSG_H__F9CB9441_F91B_11D1_8610_0040055C08D9__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// MyMsg.h : header file
//
#include <afxwin.h>
/////////////////////////////////////////////////////////////////////////////
// CMyMsg CWnd

class CMyMsg : public CWnd
{
DECLARE_DYNAMIC(CMyMsg)

public:
static WNDPROC m_wndProc;

public:
CMyMsg();

private:
//{{AFX_MSG(CFolderDialog)
// NOTE - the ClassWizard will add and remove member functions here.
afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};


//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MYMSG_H__F9CB9441_F91B_11D1_8610_0040055C08D9__INCLUDED_)
------------------------------------------------------------------------------------------------------------
#include "MyMsg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyMsg

IMPLEMENT_DYNAMIC(CMyMsg,CWnd)

WNDPROC CMyMsg::m_wndProc = NULL;

BEGIN_MESSAGE_MAP(CMyMsg , CWnd)
//{{AFX_MSG_MAP(CFolderDialog)
// NOTE - the ClassWizard will add and remove mapping macros here.
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

LRESULT CALLBACK WindowProcNew(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam)
{
return CallWindowProc(CMyMsg::m_wndProc, hwnd, message, wParam, lParam);
}
CMyMsg::CMyMsg()
{
}
void CMyMsg::OnLButtonDown( UINT nFlags, CPoint point )
{
::Beep(1000,1000);
}



...全文
8 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
polosheng 2002-08-02
用class wizard 是可以,但是基类是有限制的,且我想不通的是我按它的东西写一个类是不行的.
WindowProc,里改了,那另外的都不可以接受消息了.哦,等等,好像有一个默认的东西调用一下,也许可以,我找找.

回复
aileen_long 2002-08-01
有意思的问题。我的想法,直接让windows把消息发给你新增类的鼠标左键消息处理函数,好像不行。因为windows消息都是直接发给被操作窗口的,该窗口通过它的WindowProc来捕获消息。因此建议重载你框架窗口类的WindowProc,在那里转发该消息。
回复
andy_lau 2002-08-01
参考以下《深入浅出mfc》
回复
papaya_stone 2002-08-01
CWnd类本身就有成员函数WindowProc专门用来处理消息。你为什么不用class wizard来添加WindowProc函数?

可能问题出在你自己添加的WindowProcNew函数上,去掉你的WindowProcNew函数,用class wizard来帮你添加WindowProc函数。
回复
polosheng 2002-07-31
那真的是一点办法都没了吗?我在想的是是不是有什么虚函数可以让我改
回复
polosheng 2002-07-29
是的,我知道一般是用CWnd的派生类去截消息的
一般是CCmdTarget派生类可以截command . cwnd的派生类可以截command和一些 window已定义的消息
但所有的东西似乎都已经定死了,我不知道到哪里去加我的类
回复
chenshi999 2002-07-28
MFC中通常在CCmdTarget子类中对UI消息进行处理。CWinApp的子类通常不
处理UI的类似消息,主要是由于在MFC程序注册类别时,系统初始化就如此了。
RegisterClass()
回复
polosheng 2002-07-28
不是,我是在只有CWinApp 和 CFrameWnd 的那个经典的Hello MFC里改
问题就是不知到要往哪里加,还有AfxWndProc要不要改,怎么改?请大致说一下好吗

另外,我想就是向导生成的也是能改的.想一想CDialog,它并没有改已在的代码,但有自己的消息处理.
回复
polosheng 2002-07-28
不是 ,我是加在那个经典的非向导的"Hello MFC" (只有CWinApp 和CFrameWnd)
问题就是不知到要加在那里, 要不要改AfxWndProc函数,怎么改.请具体说说好吗.
另外,我想即使向导生成的,也是可以加的.想一想dialog,它并没动已经在的代码,但仍可以有自己的消息处理.
回复
czn 2002-07-28
老兄,你这样写的话
你要响应的消息已经被其他类给拦截了
你得先把UI消息的流动路径搞懂才行!
UI消息的ROUTING虽然可以拐弯,但是如果你是用向导生成的代码的话
他的路径是固定的,也就是他不可能传递到你定义的类里去。
对了,鼠标左键被按下可不是UI消息(命令消息),而是WINDOWS消息
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告