一个类里响应消息的问题

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);
}



...全文
60 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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消息

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧