MiniGUI杂记
时间:2007-04-18 来源:rockins
|
MiniGUI杂记
(陈云川 [email protected] UESTC,CD 2007-04-18)
简单说一下我在学习MiniGUI的过程中的一些乱七八糟的笔记,无甚条理,也不一定对,当作消遣看看就可以了。
MiniGUI-Lite只能运行一个服务器进程mginit。这是通过一个文件锁来确保其唯一性的。这个文件锁的位置为/var/tmp/mginit。MiniGUI-Lite服务器通过一个Unix域套接口与客户端通信。这个Unix域套接口的位置为/var/tmp/minigui。
在MiniGUI应用程序中,应该在主窗口的窗口过程中创建控件(或者说子窗口),即在MSG_CREATE消息的处理代码中完成控件创建工作。创建完控件之后应该直接返回0,不需要再交给默认的主窗口过程函数去处理。如果创建成功,那么应该返回0;返回非零值表明创建过程出现了错误,此时MiniGUI将会销毁所创建的控件。
在MiniGUI中,静态框控件(static)可以用来将控件分组,但不能将其作为诸如按钮之类控件的父窗口。因为这样做的话按钮控件将接收不到诸如鼠标或者键盘之类的消息。要使控件能够接收消息,必须使控件的父控件为主窗口。
当处理诸如LBUTTONDOWN之类的消息时,应该在处理之后再将其传给DefaultMainWinProc()处理,这样才能看到按钮被按下这样的效果。
向主窗口发送MSG_PAINT消息应该采用SendMessage()而不是PostMessage(),PostMessage()会将消息投递到消息队列中,而SendMessage()是将消息直接发送给希望重绘的主窗口。
诸如SetDlgItermText()这样的函数既可以作用在对话框上,也可以作用在子窗口(控件)或者主窗口上。
如果采用tslib为MiniGUI提供触摸屏的IAL输入引擎。那么要知道如下事实:tslib的标定数据存储在/etc/pointercal文件中,通过该文件提供的标定数据,tslib才能在触摸屏坐标与显示屏坐标之间正确转换。因为tslib要通过dlopen()等加载动态链接库,因此不可以将tslib编译为静态库。另外,在重新编译生成了新的目标文件或者动态共享库之后,一定要记得将新的共享库拷贝到目标板上。因为如果程序交叉编译时链接的共享库与在目标板上实际运行时的共享库不匹配,将很容易引起诸如段错误之类的问题,极其难以调试。