不好意思,又要来麻烦大家了 :P我自己写了一个类,目的是在一个子窗口中,画出一个图标,并且封装对这个图标的右键单击的处理,可是对象能够画出来,可是鼠标点击的消息怎么都收不到,不知为何。是不是发给父窗体了?我是一点都不知道啊,请指教。以下是我的源代码:class CGraphIcon:public CStatic
{
//DECLARE_DYNCREATE(CGraphIcon) //这一句也有些问题,不过可以以后讨论,它不是重点
public:
CGraphIcon(){pWnd=this->GetParent();};
CGraphIcon(UINT nIconResourceID,const CRect &rect,CWnd *parent,UINT nID):CStatic()
{
CStatic::Create("",SS_ICON,rect,parent,nID);
SetIcon(AfxGetApp()->LoadIcon(nIconResourceID));
ShowWindow(SW_SHOWNORMAL);
pWnd=parent;
pWnd->MessageBox("Constructor Paint!!!!");
};
private:
CWnd *pWnd;
~CGraphIcon(){};
protected:
//{{AFX_MSG(CGraphIcon)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnDoClick();
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()//*/
};////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GraphIcon.h"
BEGIN_MESSAGE_MAP(CGraphIcon, CWnd)
//{{AFX_MSG_MAP(CGraphIcon)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_BN_CLICKED(ID_ICON,OnDoClick)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CGraphIcon::OnDoClick()
{
pWnd->MessageBox("You Clicked Me!!!!");
}
void CGraphIcon::OnLButtonDown(UINT nFlags, CPoint point)
{
pWnd->MessageBox("You Clicked Me!!!!");
CWnd::OnLButtonDown(nFlags, point);
MessageBox("You Clicked Me!!!!");
}
void CGraphIcon::OnPaint()
{
CPaintDC dc(this);
MessageBox("nPaint!!!!");
pWnd->MessageBox("Paint!!!!");
}
{
//DECLARE_DYNCREATE(CGraphIcon) //这一句也有些问题,不过可以以后讨论,它不是重点
public:
CGraphIcon(){pWnd=this->GetParent();};
CGraphIcon(UINT nIconResourceID,const CRect &rect,CWnd *parent,UINT nID):CStatic()
{
CStatic::Create("",SS_ICON,rect,parent,nID);
SetIcon(AfxGetApp()->LoadIcon(nIconResourceID));
ShowWindow(SW_SHOWNORMAL);
pWnd=parent;
pWnd->MessageBox("Constructor Paint!!!!");
};
private:
CWnd *pWnd;
~CGraphIcon(){};
protected:
//{{AFX_MSG(CGraphIcon)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnDoClick();
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()//*/
};////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GraphIcon.h"
BEGIN_MESSAGE_MAP(CGraphIcon, CWnd)
//{{AFX_MSG_MAP(CGraphIcon)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_BN_CLICKED(ID_ICON,OnDoClick)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CGraphIcon::OnDoClick()
{
pWnd->MessageBox("You Clicked Me!!!!");
}
void CGraphIcon::OnLButtonDown(UINT nFlags, CPoint point)
{
pWnd->MessageBox("You Clicked Me!!!!");
CWnd::OnLButtonDown(nFlags, point);
MessageBox("You Clicked Me!!!!");
}
void CGraphIcon::OnPaint()
{
CPaintDC dc(this);
MessageBox("nPaint!!!!");
pWnd->MessageBox("Paint!!!!");
}
Debug/bt.exe : fatal error LNK1120: 1 unresolved externals那个GetRuntimeClass(void)需要手动重载,写它的实现吗?我觉得不用吧。
////////CGraphIcon.h////////////////////
#include <afxwin.h>
#ifndef _GRAPHICON_H_
#define _GRAPHICON_H_
#define ID_ICON 109
class CGraphIcon:public CStatic
{
DECLARE_DYNCREATE(CGraphIcon)//问题好像就是这里引起的
public:
CGraphIcon(){pWnd=this->GetParent();};
CGraphIcon(UINT nIconResourceID,const CRect &rect,CWnd *parent,UINT nID):CStatic()
{
CStatic::Create("",SS_ICON|SS_NOTIFY,rect,parent,nID);
SetIcon(AfxGetApp()->LoadIcon(nIconResourceID));
ShowWindow(SW_SHOWNORMAL);
pWnd=parent;
pWnd->MessageBox("Constructor Paint!!!!");
};
private:
CWnd *pWnd;
~CGraphIcon(){};
protected:
//{{AFX_MSG(CGraphIcon)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnDoClick();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif我是否写的不规范,而造成了如上的错误?请指点一下。谢谢了!
2.使用class wizard 添加BN_CLICKED的处理程序.
3.使用class wizard 在对话框上为那个static control加变量,使用control,并使之为CMyStatic.这样它就可以响应BN_CLICKED.再说一遍,写MFC的那么天才们认为,如果你要使用MFC,请踩着他们的脚印走,否则踩着地雷与他们无关.