XNextEvent(display,&e)
的我需要访问此window
所属的类,在对网络和图书进行一些搜索后XSaveContext和XFindContext看起来很有用,但我没有找到任何使用的例子。所以让我们试试:
我有一个class Metallica
,我希望在Metallica object
中调用constructor
时保存XContext
的地址:
class Metallica{
private:
Window window;
int i;
.
.
public:
Metallica(...,int j, XContext *context){
.
.
i=j;
//XSaveContext(display, this->window, *context, this); // don't work
XSaveContext(display, this->window, *context, XPointer(this));
.
.
void MasterOfPuppet(){
cout << i << endl;
};
void FadeToBlack(){
cout << "OK" << endl;
};
};
};
所以现在在我的xevent循环中,我希望得到一个Metallica对象的地址,
// at the declaration area :
// XContext Metallica_Context;
// XPointer *XPointerToOneMetallicaObject;
XFindContext(display,
e.xany.window,
Metallica_Context,
XPointerToOneMetallicaObject );
Metallica *SandMan = (Metallica*)(*XPointerToOneMetallicaObject);
SandMan->FadeToBlack(); // no problem
SandMan->MasterOfPuppet(); // return a segmentation fault
所以我做错了什么,但是什么?
答案 0 :(得分:0)
我发现错误的地方,当我致电XFindContext()
时,参数e.xany.window
可以被'任意'窗口调用,所以即使不是Metallica
,也可以调用{{} 1}}做什么...所以我需要保护它的呼叫!
好吧,这里有一个基本的(我不保护呼叫,但在这种情况下,不做屎)工作代码(您可以使用此代码查看如何使用MasterOfPuppet()
,幸运的是......):
XContext