游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2700|回复: 6

请问WndProc函数的问题

[复制链接]

14

主题

77

帖子

83

积分

注册会员

Rank: 2

积分
83
发表于 2007-5-17 21:47:00 | 显示全部楼层 |阅读模式
WndProc如果是放入类中,必须是static的。这样就没法访问类的成员了,很不爽

我又写了一个非静态的InnerWndProc,它能访问类成员。

然后直接用WndProc调用InnerWndProc:
static INT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
return ::pApp->InnerWndProc( hwnd, msg, wParam, lParam );
}

pApp是一个指向该类的实例的全局变量

想着应该能行,但是实验结果不行

如果在InnerWndProc中访问对象的成员,就会出现运行时错误。不知道为什么?

game.exe 中的 0x00411cb3 处未处理的异常: 0xC0000005: 读取位置 0x0000007c 时发生访问冲突 [em17]

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2007-5-17 21:51:00 | 显示全部楼层

Re:请问WndProc函数的问题

请确认在CreateWindow前初始化pApp

这个问题可以参见MFC

14

主题

77

帖子

83

积分

注册会员

Rank: 2

积分
83
 楼主| 发表于 2007-5-18 11:19:00 | 显示全部楼层

Re:请问WndProc函数的问题

我的pApp是在类的构造函数里面赋值的,是不是这样不行?

14

主题

77

帖子

83

积分

注册会员

Rank: 2

积分
83
 楼主| 发表于 2007-5-18 11:25:00 | 显示全部楼层

Re:请问WndProc函数的问题

我把它放在构造函数结束之后,马上就好了!!!

是不是在构造函数里面的时候,this指针是无效的?

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-5-18 12:00:00 | 显示全部楼层

Re:请问WndProc函数的问题

你把全部代码放出来吧

2

主题

141

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2007-5-18 12:22:00 | 显示全部楼层

Re:请问WndProc函数的问题

还有办法就是将回调函数WINAPI ...声明为类的友元
嘿嘿,包你爽,类里的东东任你取用

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2007-5-18 17:43:00 | 显示全部楼层

Re:请问WndProc函数的问题

::SetWindowLong(m_hWnd,GWL_USERDATA,(LONG)this);


然后
CBaseApp *pWnd= (CBaseApp*)GetWindowLong(hWnd,GWL_USERDATA);
if(pWnd==NULL) return DefWindowProc(hWnd, message, wParam, lParam);
return pWnd->WndProc(hWnd, message, wParam, lParam);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 10:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表