请问从CWnd中派生出来的控件怎么响应双击消息 --没有分了,一共就40 //bow 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是说自己从CWnd派生出一个类来,然后在向导中加入那个消息但是我得不到那个消息请问你Create的时候的style是怎么设置的谢谢 style要看你的需要了,最简单的WS_CHILD | WS_VISIBLE就可以了。 ft要是这样的话应该是不行的我贴一下我得代码H文件#if !defined(AFX_SPWNDGROUP_H__E361ACC5_EF20_499D_B512_A515BF305125__INCLUDED_)#define AFX_SPWNDGROUP_H__E361ACC5_EF20_499D_B512_A515BF305125__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// SPWndGroup.h : header file//class CSPWndGroup : public CWnd{// Constructionpublic: CSPWndGroup();// Attributespublic:// Operationspublic:// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CSPWndGroup) //}}AFX_VIRTUAL// Implementationpublic: BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect,const RECT &rect1, CWnd* pParentWnd, UINT nID); virtual ~CSPWndGroup(); // Generated message map functionsprotected: //{{AFX_MSG(CSPWndGroup) afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); //}}AFX_MSG DECLARE_MESSAGE_MAP()};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_SPWNDGROUP_H__E361ACC5_EF20_499D_B512_A515BF305125__INCLUDED_)在.CPP文件中BEGIN_MESSAGE_MAP(CSPWndGroup, CWnd) //{{AFX_MSG_MAP(CSPWndGroup) ON_WM_MOUSEMOVE() ON_WM_PAINT() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_LBUTTONDBLCLK() //}}AFX_MSG_MAPEND_MESSAGE_MAP()void CSPWndGroup::OnLButtonDblClk(UINT nFlags, CPoint point) { AfxMessageBox("dd"); CWnd::OnLButtonDblClk(nFlags, point);}但是双击还是没有响应其他的都没有问题 贴CSPWndGroup的代码有什么用,你CSPWndGroup的对象呢,如何创建的? 在CShView.h中定义CSPWndGroup group_tool;在CShView.cpp的OnInitialUpdate中Creategroup_tool.Create("Editing Tools",WS_CHILD |WS_VISIBLE,CRect(100,50,100,30),CRect(100,10,230,30),this,1);谢谢 看不出什么问题。CSPWndGroup的Create()函数是怎么写的呢?OnLButtonDown()等都正确惟独OnLButtonDblClk()?反正,你可以这样做个例子:建一个SDI project,写一个CTestWnd继承CWnd,什么也不做,只增加对WM_LBUTTONDBLCLK的响应,在CYourView中增加对象CTestWnd m_wnd;,在CYourView::OnInitialUpdate()中: CRect rc; rc.SetRect(0, 0, 100, 100); m_wnd.Create(NULL, "Test", WS_CHILD | WS_VISIBLE | WS_BORDER, rc, this, 1000);试试,肯定没问题。 我自己写一个Create函数BOOL CSPWndGroup::Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT &rect,const RECT &rect1, CWnd *pParentWnd, UINT nID){ return CWnd::Create(AfxRegisterWndClass(NULL), lpszWindowName,dwStyle, rect, pParentWnd, nID);}结果就接收不到了改成return CWnd::Create(NULL,lpszWindowName,dwStyle, rect, pParentWnd, nID);就好了 请笑纳不过能不能说一下原因呢//bow 这两种方法区别就是,你用AfxRegisterWndClass(NULL)注册了一个Window Class,而AfxRegisterWndClass()的nClassStyle参数为NULL意味着用缺省的class style,而缺省的class style中有CS_DBLCLKS风格,设置了该风格以后,鼠标的double click消息被发送到你的窗口函数中去了,所以,你的消息处理函数不再接收到该消息。如果你对窗口函数(window procedure)有疑问,请参见MSDN。 帮忙解释一下这段代码(很短) 再请教 SQL语句Update的写法 大家来会诊:本地建立了一个UDP socket,异地另一Socket向其发包,Sniffer抓包显示本机已收到UDP包,但程序未响应(OnReceive函数未调用 如何修改对话框的样子? 关于自动关机??望各位前辈多多指! 新年快乐!希望各位高手指导! 北通手柄如何用VC编程实现控制 能不能直接修改listbox里的值 大家好,我有几个问题请教,谢谢. TFTP 和 ftp 是什么关系? 如何在AfxMessageBox中输出变量的值(vc菜鸟) 在线求救!怎样给对象传递参数?
但是我得不到那个消息请问你Create的时候的style是怎么设置的
谢谢
要是这样的话应该是不行的
我贴一下我得代码
H文件#if !defined(AFX_SPWNDGROUP_H__E361ACC5_EF20_499D_B512_A515BF305125__INCLUDED_)
#define AFX_SPWNDGROUP_H__E361ACC5_EF20_499D_B512_A515BF305125__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SPWndGroup.h : header file
//
class CSPWndGroup : public CWnd
{
// Construction
public:
CSPWndGroup();// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSPWndGroup)
//}}AFX_VIRTUAL// Implementation
public: BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect,const RECT &rect1, CWnd* pParentWnd, UINT nID);
virtual ~CSPWndGroup(); // Generated message map functions
protected: //{{AFX_MSG(CSPWndGroup)
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_SPWNDGROUP_H__E361ACC5_EF20_499D_B512_A515BF305125__INCLUDED_)在.CPP文件中BEGIN_MESSAGE_MAP(CSPWndGroup, CWnd)
//{{AFX_MSG_MAP(CSPWndGroup)
ON_WM_MOUSEMOVE()
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void CSPWndGroup::OnLButtonDblClk(UINT nFlags, CPoint point)
{
AfxMessageBox("dd");
CWnd::OnLButtonDblClk(nFlags, point);
}
但是双击还是没有响应
其他的都没有问题
CSPWndGroup group_tool;
在CShView.cpp的OnInitialUpdate中Create
group_tool.Create("Editing Tools",WS_CHILD |WS_VISIBLE,CRect(100,50,100,30),CRect(100,10,230,30),this,1);谢谢
反正,你可以这样做个例子:
建一个SDI project,写一个CTestWnd继承CWnd,什么也不做,只增加对WM_LBUTTONDBLCLK的响应,在CYourView中增加对象CTestWnd m_wnd;,在CYourView::OnInitialUpdate()中:
CRect rc;
rc.SetRect(0, 0, 100, 100);
m_wnd.Create(NULL, "Test", WS_CHILD | WS_VISIBLE | WS_BORDER, rc, this, 1000);
试试,肯定没问题。
BOOL CSPWndGroup::Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT &rect,const RECT &rect1, CWnd *pParentWnd, UINT nID)
{
return CWnd::Create(AfxRegisterWndClass(NULL), lpszWindowName,dwStyle, rect, pParentWnd, nID);
}
结果就接收不到了
改成return CWnd::Create(NULL,lpszWindowName,dwStyle, rect, pParentWnd, nID);就好了
不过能不能说一下原因呢
//bow