wineserver 窗体显示相关功能

文章详细介绍了wineserver在操作系统中的关键角色,包括消息路由、窗口管理函数(如创建、销毁窗口)以及与X11驱动的交互。在创建窗口的过程中,从CreateWindowEx开始,经过用户模式到内核模式的调用,最终在winex11drv.so中通过XCreateWindow与X11进行交互。
摘要由CSDN通过智能技术生成

wineserver 主要实现了以下功能:
- 消息路由
- 处理注册表
- 调试接口
- 同步原语
- 窗口管理
- 线程跟踪
- 区域操纵

应用在创建/销毁/设置/获取窗口时,均需要与server 进行通信,调用其提供的窗口管理函数。
其使用自定义协议,协议内容参考 protocol.def 文件,跟窗体管理等相关的接口如下:

/server/request.h   
DECL_HANDLER(create_window);
DECL_HANDLER(destroy_window);
DECL_HANDLER(get_desktop_window);
DECL_HANDLER(set_window_owner);
DECL_HANDLER(get_window_info);
DECL_HANDLER(set_window_info);
DECL_HANDLER(set_parent);
DECL_HANDLER(get_window_parents);
DECL_HANDLER(get_window_children);
DECL_HANDLER(get_window_children_from_point);
DECL_HANDLER(get_window_tree);
DECL_HANDLER(set_window_pos);
DECL_HANDLER(get_window_rectangles);
DECL_HANDLER(get_window_text);
DECL_HANDLER(set_window_text);
DECL_HANDLER(get_windows_offset);
DECL_HANDLER(get_visible_region);
DECL_HANDLER(get_surface_region);
DECL_HANDLER(get_window_region);
DECL_HANDLER(set_window_region);
DECL_HANDLER(get_update_region);
DECL_HANDLER(update_window_zorder);
DECL_HANDLER(redraw_window);
DECL_HANDLER(set_window_property);
DECL_HANDLER(remove_window_property);
DECL_HANDLER(get_window_property);
DECL_HANDLER(get_window_properties);

其实际由server/window.c 去处理。
以创建窗口为例,查看完整的调用流程如下。

窗口创建时调用
1、CreateWindowEx

2、调用create_window (user32.dll win.c)
user32.dll 在初始化时,将create_window 函数定向到WIN_CreateWindowEx;

3、调用 WIN_CreateWindowEx (user32.dll win.c)

4、跳转到 NtUserCreateWindowEx (win32u.so windows.c)
其会与wineserver 通信,调用如下函数
create_window
set_window_pos
set_window_info
set_window_text

代码执行靠后有一句

if (!user_driver->pCreateWindow( hwnd )) goto failed;

查看路径,user_driver 在初始化时会定向到X11DRV_CreateWindow(winex11drv.so 中) 函数,最终会调用到xlib 的 XCreateWindow;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值