问关于窗口函数能不能作为类的非静态成员的问题

hear_rain 2004-09-02 09:53:16
听说窗口函数只能是全局函数或者类的静态成员函数,不过如果窗口函数想要用到类里的成员该怎么办呢??有没有什么折中的办法?

请指教
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hear_rain 2004-09-06
  • 打赏
  • 举报
回复
谢谢楼上各位

我曾经在cppfans里看到一个很复杂的例子,而且看到有人回复说在CSDN里有很简单的办法解决,但却没有找到.我想季老大的办法就是这个传说中很简单的办法了.多谢!
jishiping 2004-09-03
  • 打赏
  • 举报
回复
如果回调函数WinProc要用到Form里面的成员的话,那说明hwnd应该是Form的Handle或者
Form里面的控件的Handle了,此时可以用下面的VCL函数将HWND转换为VCL控件:
TWinControl* __fastcall FindControl(HWND Handle);

另外一个办法,如果你想改变控件的消息处理函数(就是你上面说的WinProc),可以使用
VCL的方法,而不采用API函数来实现。使用VCL的方法,消息处理函数必须是class的一个成
员函数,这样就可以满足你的要求了。每个TControl派生的控件,都有一个属性WindowProc
你只要将这个属性指向你自己的成员函数就可以了。
jiangchun_xn 2004-09-03
  • 打赏
  • 举报
回复

这是因为回调函数的原因,Win API回调函数参数不能传递一个类的非静态成员函数的指针
hear_rain 2004-09-02
  • 打赏
  • 举报
回复
就是这样的函数:

LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

可以用在SetWindowLong里
constantine 2004-09-02
  • 打赏
  • 举报
回复
我也不知道那个是窗口函数
eastnofail 2004-09-02
  • 打赏
  • 举报
回复
什么是窗口函数?

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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