XCB

X协议的c语言绑定(XCB) 是一种替代Xlib具有占用空间小,延迟隐藏,直接访问协议,提高线程的支持,和可扩展性。

介绍
这个手册是用来介绍给想用XCB library进行编程需要的人们。 像使用Xlib library来使用XCB, 因为不是大多数的编程人员都想要写X的应用程序。而更多的开发者是想使用更高级的GUI 开发工具,如Motif, LessTiff, GTK, Qt, EWL, or ETK 或者更高级的使用library Cairo来进行绘制。虽然, 不是所有的XCB的基础都很复杂,了其他一些库的上层的东西也不是坏事。
在读完这个手册之后,一个人可以写简单图形程序而不是好看的图形界面(至少是相对简单的)。在写应用程序之前,这个先前的关于上面库的了解是更有必要的。
什么是XCB,为什么它为存在?
XCB("X C Bing")是一个低级的api给X window server。 XCB是Xlib的一个替代产物,Xlib曾是多年以来标准的C绑定的给X Window System 协议的库。Xlib表现得很优秀,但是对于应用程序来说也有很多不理想的地方,例如:
  • 小平台: Xlib包含在大段的代码,精简起来十分困难
  • 延迟隐藏:Xlib需要有效的同步回复:他们会一直阻塞直到获取到结果,不管这个结果是否立即需要
  • 直接访问协议:Xlib需要大量的缓存,层和相似的优化。由于这个通性,它很难简单的发出特定的X 协议请求和处理特定的响应
  • 线程化应用程序:Xlib尽量会支持多线程,它的api的容错性较差
  • 新的扩展:Xlib的底部架构提供了有限的支持给新的X的扩展客户端代码。
XCB被设计用来解决上述的问题,目前已经解决的有:
  • 工具包的实现
  • 直接进行协议级的编程
  • 轻量级的调用常用的Xlib api.

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 xcb 编写程序时,可以使用以下函数禁止按键重复: ```c xcb_change_keyboard_control( xcb_connection_t *connection, uint32_t value_mask, const void *value_list ); ``` 其中,`value_mask` 参数控制需要更改的键盘属性,`value_list` 参数包含了对应的属性值。要禁用按键重复,可以设置 `value_mask` 为 `XCB_KB_AUTO_REPEAT_MODE`,并将 `value_list` 设置为一个长度为 2 的数组,第一个元素为 `XCB_AUTO_REPEAT_MODE_OFF`,第二个元素为 `0`。 下面是一个示例代码: ```c #include <xcb/xcb.h> int main() { xcb_connection_t *connection; xcb_screen_t *screen; xcb_window_t window; // 连接到 X11 服务器 connection = xcb_connect(NULL, NULL); // 获取默认屏幕 screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data; // 创建窗口 window = xcb_generate_id(connection); xcb_create_window( connection, XCB_COPY_FROM_PARENT, window, screen->root, 0, 0, 200, 200, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, screen->root_visual, 0, NULL ); // 禁用按键重复 uint32_t values[] = {XCB_AUTO_REPEAT_MODE_OFF, 0}; xcb_change_keyboard_control(connection, XCB_KB_AUTO_REPEAT_MODE, values); // 显示窗口 xcb_map_window(connection, window); xcb_flush(connection); // 循环处理事件 xcb_generic_event_t *event; while ((event = xcb_wait_for_event(connection))) { switch (event->response_type & ~0x80) { case XCB_KEY_PRESS: // 处理按键按下事件 break; case XCB_KEY_RELEASE: // 处理按键释放事件 break; default: // 处理其他事件 break; } free(event); } // 断开连接 xcb_disconnect(connection); return 0; } ``` 在上面代码中,我们将 `xcb_change_keyboard_control()` 函数用于禁用按键重复。这样,当用户按下一个键时,只会发送一次按键按下事件,而不会发送多个事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值