将x11窗口创建与window句柄关联
问题概述
wine下窗口创建是通过window下的createwindow创建->调用x11的xcreatewindow流程,在linux下有很多观察窗口的工具,如何将x11下的window id与wine下窗口进行关联?
步骤
- wine启动一个notepad窗口,通过
xwininfo获取到窗口的id
- 学习wine源码发现wine中窗口创建是在winex11.drv模块下,准确来说是在该模块的
window.c函数中
1 | if (!(cx = data->whole_rect.right - data->whole_rect.left)) cx = 1; |
XCreateWindow窗口创建返回data->whole_window的值为窗口创建后的窗口id,通过第一步会发现与该值一致。通过源码学习该函数下面使用
XSaveContext( data->display, data->whole_window, winContext, (char *)data->hwnd );函数,将窗口x11创建的id与window下的hwnd进行关联通过打印
WIN_CreateWindowEx函数创建的句柄,发现就是该窗口