那么,创建窗口的一切准备都已做好
窗口,启动!
窗口有属性,有很多属性,这里面最难理解的我个人认为就是gravity了,窗口怎么会有引力呢?但是,当你伸缩窗口的时候,图形应该往哪里动呢?懂了吧,这就是在窗口大小变化的情况下控制窗口下属的图像和窗口往哪动的东西,所以窗口不仅有gravity,还分为bit_gravity和win_gravity分别控制图像和子窗口
如果你想要创建一个具有个性化的窗口,怎么办呢?当然是自己研究去喽,我这是新手引导,只教到在简单窗口里放图片
![[阴险]](/static/emoticons/u9634u9669.png)
(主要是懒,说不定以后有激情了还会增加内容呢)
所以直接使用XCreateSimpleWindow
函数声明比较复杂,我就不写了,在下面图片上了,这个函数隐藏了大部分窗口的细节,这些细节要么copyfromparent(我要是也能copy from parent多好啊),要么就是类似gravity这种又复杂又得视情况而定的玩意直接给个默认值,图片引力的默认值是不动,子窗口引力的默认值是向西北方向也就是左上角动
然后这个窗口毕竟是我们的第一个窗口所以直接让这个窗口创建为默认屏幕的根窗口的子窗口,直接使用XDefaultRootWindow作为父窗口,后面创建的的坐标,窗口大小,边框宽度的应该不用解释
那么问题来了,边框颜色和背景颜色呢?怎么办?颜色机制我将会在之后介绍,现在先用两个函数解燃眉之急,这两个函数可以帮你找到在某个屏幕上,什么样的白最白,什么样的黑最黑所以直接使用这两个函数作为XCreateSimpleWindow的参数了
例:
Window win = XCreateSimpleWindow(dsp,XDefaultRootWindow(dsp),50,50,800,600,0,BlackPixel(dsp,screen_number),BlackPixel(dsp,acreen_number));
那么窗口创建完了,欸?为什么没有窗口呢?答案是窗口的全部数据都有了,但是我们还需要让他根据这些数据画出来,就像是Git里先add再commit一样,所以使用
XMapWindow(dsp,win);
ok,欸?程序怎么卡住不动弹了?原来是每个窗口创建都是一个事件,就类似于键盘输入,如果你一直不刷新事件队列,后面的事件和步骤就一直完成不了,旧的不去新的不来嘛,所以这里也祝大家新年快乐,年年都有新气象,怎么办呢?
直接使用XFlush(dsp);这里就不多介绍这个函数了,以后讲事件的时候会说到,一个就足矣
ok,欸?程序怎么结束了?原来是窗口刚map出来就直接return 0了所以最后再写一个死循环吧
终于,我们的窗口出来了,如果你看到了一个背景是黑的窗口出现在你的屏幕上,说明你成功了
![[呵呵]](/static/emoticons/u5475u5475.png)






