窗口过程函数可以是类的保护的、静态成员函数吗?

沙尘暗影 2013-07-01 09:51:08
class CWnd
{
protected:
static LRESULT CALLBACK CWnd::g_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
//……
};

LRESULT CALLBACK CWnd::g_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
//……
}

我前不久得到一份程序,能编译运行。我发现在注册窗口类的时候,窗口过程函数是CWnd的g_WndProc,这个成员函数是保护的,外界怎么调动它?
...全文
146 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
沙尘暗影 2013-07-02
  • 打赏
  • 举报
回复
引用 5 楼 lm_whales 的回复:
这个是回调函数,只需要把函数指针传递过去就行了,函数指针,是不分public,protected,private 的。 实际上都是public的。 窗口过程回调函数,是线程处理消息循环时,被操作系统调用的。
刚才用小程序实验了一下,确实是这样
mujiok2003 2013-07-01
  • 打赏
  • 举报
回复
引用 3 楼 alanmaths 的回复:
[quote=引用 2 楼 mujiok2003 的回复:] 或者在类内部/子类内部让其余窗口关联.
我又仔细看了一下代码,他(作者)确实是这么干的,在成员函数中注册窗口类。 不过窗口过程函数应该是由windows来调用的吧?系统并不在类的内部,它怎么访问到这个函数?[/quote] windows的消息机制不认识认识类,只关系与之关联的消息处理过程(回调函数).
沙尘暗影 2013-07-01
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
或者在类内部/子类内部让其余窗口关联.
我又仔细看了一下代码,他(作者)确实是这么干的,在成员函数中注册窗口类。 不过窗口过程函数应该是由windows来调用的吧?系统并不在类的内部,它怎么访问到这个函数?
mujiok2003 2013-07-01
  • 打赏
  • 举报
回复
或者在类内部/子类内部让其余窗口关联.
mujiok2003 2013-07-01
  • 打赏
  • 举报
回复
可以,使用getter返回函数指针.
lm_whales 2013-07-01
  • 打赏
  • 举报
回复
这个是回调函数,只需要把函数指针传递过去就行了,函数指针,是不分public,protected,private 的。 实际上都是public的。 窗口过程回调函数,是线程处理消息循环时,被操作系统调用的。

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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