<!-- @page { margin: 2cm } TD P { margin-bottom: 0cm } P { margin-bottom: 0.21cm } -->
1. 如何使用gtk+ 在窗体上绘图
如果要在窗体上绘图,在MFC 中时使用DC 来进行操作的。那么在gtk+ 中是怎么做的呢?
为了捕获构件的时间,我们需要使用事件盒构件。对于绘图程序,我们想知道什么时候鼠标键按下和什么时候鼠标移动,因此我们要用GDK_POINTER_MOTION_MASK 和GDK_BUTTON_PRESS_MASK 。我们也想知道什么时候窗口需要重绘,因此我们也要用GDK_EXPOSURE_MASK 。虽然我们也想在窗口尺寸时得到消息,不过我们不必用GDK_STRUCTURE_MASK 标志,因为所有的窗口都自动设了该标志。
只用GDK_POINTER_MOTION_MASK 是有问题的,这回使服务器在每次用户移动鼠标时向事件队列添加一个移动事件。假设处理一个移动事件需要0.1 秒,但是X 服务器每0.05 秒添加一个新的移动事件。如果用户绘制需要5 秒,那么在释放鼠标键后我们的程序会中断5 秒~ 我们所需要的知识为我们处理的每个时间的获取一个移动事件。解决这个问题的方法是用GDK_POINTER_MOTION_HINT_MASK.
我们用GDK_POINTER_MOTON_MASK 时,在指针进入我们的