我有两个程序,我希望一个程序将一个结构附加到它的窗口,另一个程序来读取这个结构。我必须使用X.
我尝试使用XSaveContext和XFindContext。我设法将一个结构附加到一个窗口,然后在同一个程序中读取它。
然后我创建了一个使用XSaveContext将结构附加到其窗口的程序。同时,另一个程序列出了所有打开的窗口,并尝试为每个窗口找到一个结构
XContext contextUserData = 100;
UserData data;
UserData *ptr_data = &data;
data.name = "app01 userdata name";
data.refNumber = 777;
XSaveContext(disp, win, contextUserData, XPointer(ptr_data));
std::cout<<"disp "<<disp<<" win "<<parent<<std::endl;
XContext contextUserData = 100;
UserData data_return;
UserData *ptr_data = &data_return;
XPointer xpointer = XPointer(ptr_data);
XPointer *xptr = &xpointer;
if (XFindContext(mDisplay(), allWin[i], contextUserData, (xptr)) == 0)
{
ptr_data = (UserData*)(*xptr);
std::cout<<"name : "<<ptr_data->name<<" refNumber : "<<ptr_data->refNumber<<std::endl;
}
else
{
std::cout<<"disp "<<mDisplay()<<" win "<<allWin[i]<<" No info"<<std::endl;
}
附加结构的程序显示:
disp 0x983d488 win 33554435
并且查找结构的程序显示:
disp 0x9f922f0 win 31457287 No info
disp 0x9f922f0 win 31457316 No info
disp 0x9f922f0 win 23137913 No info
disp 0x9f922f0 win 33554434 No info
disp 0x9f922f0 win 33554435 No info (the right window)
disp 0x9f922f0 win 23138015 No info
我测试了正确的窗口,但我没有得到任何结果。
我想知道是否必须使用相同的显示调用XSaveContext和XFindContext来返回结构。
所以我的问题是,如何将个人数据添加到窗口并使其可被其他窗口读取?
谢谢。
答案 0 :(得分:1)