为什么我的菜单响应函数不响应? 很可能你的鼠标消息就没有发送到这个CWND的派生类中。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果有多个类处理ID_DOUBLESTART消息的话,那么只有一个处理被调用. 对。MFC的消息处理的类(比如App、Frame、View、Doc等),这其中有先后顺序之分的。 在CDialog的派生类里就可以 为什么在CWnd的派生类里就不行 这两个我是分开单独试的是第个不行我才在第一个里面试的 #pragma once#include "Tetris.h"#define BRIGHTBORDER RGB(0,204,204)#define DARKBORDER RGB(0,153,153)#define WHITE RGB(255,255,255)#define BLACK RGB(0,0,0)#define MaxX 814#define MaxY 491// BlockBoardclass BlockBoard : public CWnd{ DECLARE_DYNAMIC(BlockBoard)public: BlockBoard(); virtual ~BlockBoard(); bool Create(RECT &rect, CWnd *pParentWnd, UINT nID);protected: afx_msg void OnTimer(UINT nIDEvent); afx_msg void OnDoublestart(); afx_msg void OnPaint(); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); DECLARE_MESSAGE_MAP()private: void Draw3dBorder(LPRECT lpRect,int nWidth,COLORREF clrTopLeft,COLORREF clrBottomRight,bool nFlag); CDC* m_pMemDC; CDC* m_pTempDC; CBitmap* m_pBitmap; CBitmap* m_pbmpBlock; CBitmap* m_pbmpNumber; CBitmap* m_pbmpGameBg; CBitmap* m_pbmpNextBg; CBrush* m_pbruGameBg; CBrush* m_pbruNextBg; CTetris m_Tetris;public: afx_msg void OnSinglestart(); afx_msg void OnExit();}; 这是cpp里面的IMPLEMENT_DYNAMIC(BlockBoard, CWnd)BEGIN_MESSAGE_MAP(BlockBoard, CWnd) ON_WM_PAINT() ON_WM_CREATE() ON_WM_TIMER() //}}AFX_MSG_MAP ON_COMMAND(ID_DOUBLESTART, OnDoublestart)// ON_UPDATE_COMMAND_UI(ID_DOUBLESTART, OnUpdateDoublestart)ON_COMMAND(ID_SINGLESTART, OnSinglestart)ON_COMMAND(ID_EXIT, OnExit)END_MESSAGE_MAP() CWnd是不是不相应这样的消息?我也不太清楚,相互学习. CWnd 不能直接响应menus, toolbar buttons, and accelerator keys产生的消息,这种消息称为Command messages ,Command messages 在MFC应用程序框架下这类消息只能被Command Targets接收到,比如MDI frame window 、Document frame window 、View、Document、Dialog box这些对象。如果要将Command messages发送到CWnd对象,可以这样试试,首先在上述的Command Targets对象中处理Command messages,然后在此消息的处理中向目标CWnd发送消息,这样间接就可以让CWnd接收到消息了。比如你的程序中 afx_msg void OnSinglestart()消息函数应该在放在MDI frame window 或者Dialog box 中,然后在此次消息函数中调用SendMessage(hwnd,msg,wParam,lParam),不知道我说清楚了没有? 谢谢 savage5000(野人)我试试 为什么CWnd不能响应Command messages 这是MFC应用程序框架决定的。command message是比较特殊的一种消息,它主要是通过用户点击菜单、工具按钮而成产生的,它并不知道这个消息要发送到何处,所以MS制订一套此类消息传送的机制,那就是先发送到MDI main frame 然后是MDI child frame,接下来是view ,再到Document,如果消息在上述的对象中没有相应的消息映射,那么消息就返回CWinApp,消息发送到此结束。对于一般的Cwnd 尤其是自定义的派生类是接受不到这种消息的,当然就不会有响应了。 可是既然不能响应为什么又有添加command消息响应的地方呢我是在属性栏的事件里添加的并不是我自己手工加的难道是vc.net的bug? 这是一个CWnd的继承类用来在dialog里面画图我把它注了册而且绘图一切正常就是不能响应command消息其它的消息都能响应 请问如何把20个控件排成矩形? 熟悉CxImage的人请进来拿分!!!!! 为什么我的右键菜单不能灰掉?????????????????????????????????????????? 在辅助线程中有无可能把传递给线程的窗体指针delete掉? 怎样在控件中使用控件 今天看不懂了程序员2003第六期 的thunk机制问题 请教各位。(等待) 请教assert是什么 大家的vc有没有这样的奇怪问题? 在线紧急求助!!win2000下做的程序在win98里运行出错怎么解决???? 救命啊救命啊救命啊 WORD和DWORD的区别是什么?各占多少字节? 如何找出一台机器中的所有文件和文件夹
为什么在CWnd的派生类里就不行
这两个我是分开单独试的
是第个不行我才在第一个里面试的
#include "Tetris.h"
#define BRIGHTBORDER RGB(0,204,204)
#define DARKBORDER RGB(0,153,153)
#define WHITE RGB(255,255,255)
#define BLACK RGB(0,0,0)
#define MaxX 814
#define MaxY 491// BlockBoardclass BlockBoard : public CWnd
{
DECLARE_DYNAMIC(BlockBoard)public:
BlockBoard();
virtual ~BlockBoard();
bool Create(RECT &rect, CWnd *pParentWnd, UINT nID);
protected:
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnDoublestart();
afx_msg void OnPaint();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
private:
void Draw3dBorder(LPRECT lpRect,int nWidth,COLORREF clrTopLeft,COLORREF clrBottomRight,bool nFlag);
CDC* m_pMemDC;
CDC* m_pTempDC;
CBitmap* m_pBitmap;
CBitmap* m_pbmpBlock;
CBitmap* m_pbmpNumber;
CBitmap* m_pbmpGameBg;
CBitmap* m_pbmpNextBg;
CBrush* m_pbruGameBg;
CBrush* m_pbruNextBg;
CTetris m_Tetris;
public:
afx_msg void OnSinglestart();
afx_msg void OnExit();
};
BEGIN_MESSAGE_MAP(BlockBoard, CWnd)
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
ON_COMMAND(ID_DOUBLESTART, OnDoublestart)
// ON_UPDATE_COMMAND_UI(ID_DOUBLESTART, OnUpdateDoublestart)
ON_COMMAND(ID_SINGLESTART, OnSinglestart)
ON_COMMAND(ID_EXIT, OnExit)
END_MESSAGE_MAP()
比如你的程序中 afx_msg void OnSinglestart()消息函数应该在放在MDI frame window 或者Dialog box 中,然后在此次消息函数中调用SendMessage(hwnd,msg,wParam,lParam),不知道我说清楚了没有?
我试试
为什么又有添加command消息响应的地方呢
我是在属性栏的事件里添加的
并不是我自己手工加的
难道是vc.net的bug?
用来在dialog里面画图
我把它注了册
而且绘图一切正常
就是不能响应command消息
其它的消息都能响应