1
通過一些窗口,我需要訪問該類別的人本window
屬於恢復,網絡和書籍,XSaveContext一些searchs後XNextEvent(display,&e)
和XFindContext看起來是有用的,但我沒有找到任何使用的例子。所以讓我們嘗試:Linux下C++的xlib,如何使用XSaveContext和XFindContext(例如提供)
我有一個class Metallica
,我想保存Metallica object
的ADRESS當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
所以我做錯了什麼,但是什麼?
水晶球:您正在存儲一個指向在堆棧上創建(然後銷燬)的Metallica的指針。另外,應該是'EnterSandMan'和'MasterOfPuppets'。我衷心贊同這個可變的命名約定。 – Casey
爲「水晶球」:它是有道理的,但'Metallica'對象沒有被破壞,實際上,它沒有被動態聲明,因此我不必破壞它。對於凱西,我希望拉爾斯不會起訴我......當我的胃充滿時,我會添加更多的代碼 –
我會避免使用Xlib,並嘗試使用一些更高級別的工具包,如Qt .... –