【发布时间】:2022-01-26 03:33:18
【问题描述】:
我希望能够在我的窗口应用程序中添加一些彩色图形,而我能做到的唯一方法是手动加载位图并使用 Xlib 的 put pixel 例程。
我目前正在使用 Xlib。我试过 gtk 和很多人,但我的头文件有编译问题,我认为其他额外的库不会工作,因为我想做一些需要尽可能少的库的东西。
在学习和实验之后,我注意到当我使用窗口管理器 (xfce) 最小化和恢复窗口时,窗口出现但内部内容消失(仅显示背景颜色),除非我包含模板中显示的事件之前的代码,即使我这样做了,我也必须重新执行所有用于在窗口中生成项目的命令。如果目标计算机较旧并且位图是逐像素加载的(尤其是大尺寸位图),这可能是灾难性的。
因此,不是每次窗口最小化然后恢复时都进行所有这些重新加载,是否有某种基本的 X 系统函数可以捕获窗口内容,并允许我将数据保存到变量(可能是指针char*) 类型的函数,那么我可以使用相同的指针调用一个函数来一次恢复窗口的所有内容,而不是一次将每个元素(包括单个位图像素)放置一个?
这是模板代码:
XEvent e;
Window w;
Display* dpy;
//events interested in
long EvCap=ExposureMask|ButtonPressMask|KeyPressMask|StructureNotifyMask;
void endx(){
// Unload stuff so memory is freed
}
void initx(){
// Load window and initial commands that don't need updating
}
void redrawWindowItems(){
// Stuff that needs to go on screen that disappears on minimize
}
int main(){
initx();
redrawWindowItems();
while(1){
if (XCheckWindowEvent(dpy,w,EvCap,&e)){
if (e.type==Expose && e.xexpose.count==0) {redrawWindowItems();} //redraw exposed windows
}
}
endx();
}
【问题讨论】:
标签: bitmap save x11 restore xlib