免费创立网站哪些网站可以做文字链广告
2026/4/16 22:14:50 网站建设 项目流程
免费创立网站,哪些网站可以做文字链广告,wordpress怎么排版,一个普通的网站做线上交易好吗前言 在Linux桌面开发领域#xff0c;XCB#xff08;X C Binding#xff09;作为Xlib的现代化替代品#xff0c;正逐渐成为X11编程的主流选择。 与传统Xlib相比#xff0c;XCB提供了更小的内存占用、更好的性能、直接的协议访问以及出色的异步支持。 本文将深入探讨如何使…前言在Linux桌面开发领域XCBX C Binding作为Xlib的现代化替代品正逐渐成为X11编程的主流选择。与传统Xlib相比XCB提供了更小的内存占用、更好的性能、直接的协议访问以及出色的异步支持。本文将深入探讨如何使用XCB进行高效窗口事件监听构建响应迅速的桌面应用。XCB vs Xlib为何选择XCB1.1 核心优势对比特性XlibXCB优势架构同步、有状态异步、无状态更好的并发性内存占用较高极低适合资源受限环境延迟隐藏差优秀减少等待时间线程安全需要锁原生支持简化多线程编程协议扩展间接访问直接访问更精细的控制Xcb 窗口监听实现2.1 建立连接#includexcb/xcb.h#includestdio.h#includestdlib.hintmain(){xcb_conn_t*connxcb_connect(NULL,NULL);if(xcb_conn_has_error(conn)){fprintf(stderr,XCB连接失败\n);return-1;}autorootxcb_setup_roots_iterator(xcb_get_setup(conn)).data-root;printf(XCB连接成功\n);printf(根窗口 ID: %lu\n,root);// ...xcb_disconnect(conn);return0;}2.2 监听窗口事件uint32_tmaskXCB_EVENT_MASK_PROPERTY_CHANGE|XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY;xcb_change_window_attributes(conn.get(),root,XCB_CW_EVENT_MASK,mask);// 等待请求完成xcb_flush(conn.get());while(1){std::unique_ptrxcb_generic_event_tevent(xcb_wait_for_event(conn));switch(event-response_type~0x80){caseXCB_PROPERTY_NOTIFY:break;caseXCB_CONFIGURE_NOTIFY:break;default:break;}}2.3 获取窗口属性信息voidprint_window_info(xcb_connection_t*conn,xcb_window_t window){// 获取窗口标题xcb_atom_t atomget_intern_atom(conn,strlen(_NET_WM_NAME),_NET_WM_NAME);autocookiexcb_get_property(conn,0,window,atom,XCB_GET_PROPERTY_TYPE_ANY,0,(~0u));std::unique_ptrxcb_get_property_reply_treply(xcb_get_property_reply(conn,cookie,NULL));if(reply){printf(窗口标题: %s\n,(char*)xcb_get_property_value(reply.get()));}// 获取窗口进程xcb_atom_t atom_pidget_intern_atom(conn,strlen(_NET_WM_PID),_NET_WM_PID);xcb_get_property_cookie_t cookiexcb_get_property(conn,0,window,atom_pid,XCB_ATOM_CARDINAL,0,1);std::unique_ptrxcb_get_property_reply_treply(xcb_get_property_reply(conn,cookie,NULL));if(reply){printf(所属进程: %d\n,*((pid_t*)xcb_get_property_value(reply.get())));}// 获取窗口尺寸xcb_get_geometry_cookie_t geom_cookiexcb_get_geometry(conn,window);std::unique_ptrxcb_get_geometry_reply_tgeom(xcb_get_geometry_reply(conn,geom_cookie,nullptr));if(geom){// 获取窗口属性xcb_window_t rootxcb_setup_roots_iterator(xcb_get_setup(conn)).data-root;// 转换坐标从窗口局部坐标 (0,0) 到根窗口坐标xcb_translate_coordinates_cookie_t trans_cookiexcb_translate_coordinates(conn,window,root,0,0);std::unique_ptrxcb_translate_coordinates_reply_ttrans(xcb_translate_coordinates_reply(conn,trans_cookie,nullptr));if(trans){printf(位置: %dx%d 大小: %dx%d\n,trans-dst_x,trans-dst_y,geom-width,geom-height);}}}高级监听功能3.1 监听活动窗口uint32_tmaskXCB_EVENT_MASK_PROPERTY_CHANGE;// 监听窗口属性和子窗口结构变化xcb_change_window_attributes(conn,root,XCB_CW_EVENT_MASK,mask);// 监听活动窗口IDxcb_atom_t active_window_atomget_intern_atom(conn,strlen(_NET_ACTIVE_WINDOW),_NET_ACTIVE_WINDOW);while(1){std::unique_ptrxcb_generic_event_tevent(xcb_wait_for_event(conn));uint8_ttypeevent-response_type~0x80;if(typeXCB_PROPERTY_NOTIFY){xcb_property_notify_event_t*prop(xcb_property_notify_event_t*)event.get();if(prop-atomactive_window_atom){xcb_get_property_cookie_t cookiexcb_get_property(connection,0,root,active_window_atom,XCB_ATOM_WINDOW,0,1);std::unique_ptrxcb_get_property_reply_treply(xcb_get_property_reply(connection,cookie,NULL));if(reply){printf(活动窗口变更: %lu\n,*((xcb_window_t*)xcb_get_property_value(reply.get())));}}}}3.2 监听窗口属性变化uint32_tmaskXCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY;// 监听子窗口结构变化xcb_change_window_attributes(conn,root,XCB_CW_EVENT_MASK,mask);while(1){std::unique_ptrxcb_generic_event_tevent(xcb_wait_for_event(conn));uint8_ttypeevent-response_type~0x80;if(typeXCB_CONFIGURE_NOTIFY){// 这里存在X11一样的问题xcb_configure_notify_event_t*conf(xcb_configure_notify_event_t*)event.get();printf(窗口大小/位置变化: ID%lu, %dx%d %d,%d\n,conf-window,conf-width,conf-height,conf-x,conf-y);}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询