关于VC++超简单的虚函数问题

classCMyButton:publicCButton{public:CMyButton();public://Overrides虚函数public:virtualvo... class CMyButton : public CButton
{
public:
CMyButton();
public:
// Overrides 虚函数
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
protected:
virtual void PreSubclassWindow();

// Implementation 自定义的变量
public:
CRect m_ClientRect; //用来保存按钮的客户矩形区
BOOL m_TimerOn; //标识计时器是否打开
UINT m_State; //按钮状态
CPoint m_Point; //保存当前鼠标位置
virtual ~CMyButton();
// Generated message map functions
protected:
//添加的WM_消息
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
问题1:我的类的父类是CButton,关于虚函数那里,为什么要用虚函数呢?是不是如果不用虚函数 virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); 而是直接写 void DrawIte(LPDRAWITEMSTRUCT lpDrawItemStruct);会怎样呢?
问题2:自己添加的WM_消息,OnCreate/OnLButtonDown/OnLButtonUp/OnMouseMove 添加后都成为了保护函数了吗?afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

各位大神求指导啊
这是我的虚函数的具体的自定义
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

GetClientRect(&m_ClientRect); //得到窗口的有效矩形区
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); //得到按钮控件客户区域的设备环境变量指针
CPen *pPen = NULL;
default:
break;

LPTSTR pCaption = new char[MAXCAPTIONLEN];//定义一个指针变量
int iLen = GetWindowText(pCaption,MAXCAPTIONLEN);//得到指针变量所指向的区域的长度
pDC->SetTextColor(TextColor); //指定文本颜色
pDC->DrawText(pCaption, iLen, &m_ClientRect, DT_SINGLELINE|DT_CENTER|DT_VCENTER);

}
展开
 我来答
shb8845369
推荐于2016-06-26 · TA获得超过280个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:167万
展开全部
1. 如果你不用virtual函数,你在DrawItem函数中的自定义操作,系统根本就不会调用。只有利用Virtual关键词重载父类的虚函数,系统才有可能调用到派生类中的函数操作。

2. 响应函数都声明在protected里的好处是,其他类没法调用,而且派生类可以直接利用它;如果你哪天不小心调用了,编译器编译通不过,会提示你。如果放在public下面,你在其他类中调用了这些消息响应函数,编译器不会提示你,但是运行的时候会出错,如果你放在private下,那你以后要派生一个子类增强功能,就又得重新敲一遍代码。所以说消息响应函数放在protected下面是最好的。
更多追问追答
追问
第一个问题懂了 第二个问题:能再讲讲protected、protected、public三种类型在调用时候的权限吗?这地方我不太懂 谢谢
追答
private: 只有本类的成员函数、友元函数、友元类可以访问,其他类包括子类都无法访问。
protected: 本类的成员函数,子类,友元类,友元函数都可以访问,其他类无法访问。
public: 相当于全局函数/全局变量,任何类,函数都可以访问,只要你有该类的实例化对象或对象指针。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式