当前位置:首页 > Minigui移植uClinux
TextOut (hdc, 100, 100, \ EndPaint (hWnd, hdc); return 0;
case MSG_CLOSE:
DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; }
return DefaultMainWinProc(hWnd, message, wParam, lParam); }
int MiniGUIMain (int argc, const char* argv[]) {
MSG Msg;
HWND hMainWnd;
MAINWINCREATE CreateInfo;
#ifdef _LITE_VERSION
SetDesktopRect(0, 0, 1024, 768); #endif
CreateInfo.dwstyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; CreateInfo.dwExstyle = WS_EX_NONE; CreateInfo.spCaption = \ CreateInfo.hMenu = 0;
CreateInfo.hCursor = GetSystemCursor(0); CreateInfo.hIcon = 0;
CreateInfo.MainWindowProc = HelloWinProc; CreateInfo.lx = 0; CreateInfo.ty = 0; CreateInfo.rx = 320; CreateInfo.by = 240;
CreateInfo.iBkColor = COLOR_lightwhite; CreateInfo.dwAddData = 0;
CreateInfo.hHosting = HWND_DESKTOP;
hMainWnd = CreateMainWindow (&CreateInfo);
if (hMainWnd == HWND_INVALID) return -1;
ShowWindow(hMainWnd, SW_SHOWNORMAL);
while (GetMessage(&Msg, hMainWnd)) { TranslateMessage(&Msg); DispatchMessage(&Msg); }
MainWindowThreadCleanup (hMainWnd);
return 0; }
#ifndef _LITE_VERSION #include
首先在 PC 上编译,验证通过!
[user]# gcc -o helloword helloword.c -lminigui –lmgext
如果没有错误,运行 qvfb ,按前面说的设置好,然后执行 [user]# ./helloword
一切正常,没有错误,现在就要把它放到我们的 板子上去跑了
[user]# arm-linux-gcc –O2 –o helloword helloword.c –lminigui –lmgext
编译完后,把它烧到板子的某个目录下,就可以在 板子上跑了!
所以这里就是说,minigui 提供了让你在 PC 上就可以调试和运行程序的方法(使用qvfb ),等你保证程序正确了以后,只需要把它重新编译一下,放到板子上去就行了!
5.一些常见的问题
这几天遇到不一些问题,发现论坛上也基本上没人回答我,所以只好自己解决了,这里把一些问题写出来,方便有需要的人:
问题1:在板子上跑的程序都显示 can not find qvfb ? 之类,可是我只是想让它在板子上跑在 FrameBuffer 之上啊?
解决:在编译 libminigui 的时候,把
[ ] Use incore (built-in) resource //建议不要选这个,老有问题
[ ] NEWGAL engine on Qt Virtual FrameBuffer //建议不要选这个,不然老让你用qvfb
问题2:编译的时候老出现 unreferenced to vbf_Courier8x8() 之类的问题
解决:
[ ] Var bitmap font //千万不要选这个,不然会出现 unreferenced vfb_Courier8x8() 之类的错误
问题3:一切都搞定了,可是执行 mginit() 的时候就崩溃了,把所有的寄存器值打印了出来,然后显示了个 Abort() 就退出了!
解决:
[ ] IME (GB2312) Intelligent Pinyin module //千万不要选这个,不然后面你的 mginit 程序一启动就崩溃了
问题4: 为什么我执行 helloword 就显示 “Can not attach shared resource!”
解决:
注意: 因为你的 minigui 是按 Lite 模式编译的,如果必须 mginit 首先运行起来,你其它的程序(比如 bomb ,或是 helloword)才能执行,如果 mginit 没有运行起来你就执行 helloword 的话,就会显示错误
“ Can not attach shared resource ! ”
问题5:怎么把自己的程序加到 minigui 的 taskbar 上去,并且排在前面??
解决:
查看 mginit 目录下的 mginit.rc 文件,里面就是配置,我想你能看明白的 :)
问题6:为什么我的程序显示 can not find libminigui.so ??
解决:你是否忘了在 etc/ld.so.conf 中加入 /usr/local/lib ,并且执行 ldconfig 程序? 看前面说的方法
好了,就写这么多吧,希望对新手有所帮助!
Singlewolfyu (大漠孤狼) 写于 清华 FIT 4-305 2006-11-7
yuqiang0107@126.com
把我写的另一篇关于 IAL 校正的文章也归并到这个贴子里来,算是做个汇总吧,原贴可以在论坛中搜 singlewolfyu 的文章就可以找到,原贴里有一些我上传的附件,有兴趣可以去下载,这里就不上传了! 希望这篇文章能对大家有用!
带屏幕校正功能的 2410 的 IAL
作者:大漠孤狼 E-MAIL:yuqiang0107@126.com
前几天成功的把 MiniGUI 移植到板子上了,顺利的跑起来了。我用的是 SMDK2410 的 IAL 程序,可是还有一些问题,如下:
1:点在触摸屏上不动,可以见到 Cusor 在点的位置附近老是跳动,而且点的位置不准,
2:经常点 MiniGUI 的菜单或是按钮的时候,MiniGUI 没有反应,经printf 出来,发现菜单有时候收不到 MSG_COMMAND 消息,有时候能收到,就是说很不稳定 3:经常点击触摸屏的手离开后,Cursor 就消失了
经过调试后发现了原因,如下:
1:由于用的触摸屏是比较便宜的那种,所谓便宜没好货,触摸屏的采样很不稳定,我的屏是 3 寸屏,分辨率是 240x320 16-pp 的那种,可是我点击触摸屏从驱动读出来的值却是 900 多,800 多,而且还不是简单的线性关系,比如我点 X 轴 120 处,值为 400 ,我点X轴 239 处值为 900 ,晕死,如果用原来的 SMDK 2410 IAL 程序,根本无法正常工作
2:便宜屏还有个问题,就是在刚开始按触摸屏和快要放手时,这一头一尾两种情况下,采样值根本就是错误的,比如我按在 X 轴 120 处,刚开始得到的值是 230 ,然后是 250,400 ,401,398,403 ??402,100,101 ,这样的序号,可以看到,在刚开始和快结束时采到的值根本是错误的,这就是为什么我说“手一离开触摸屏,Cusor就消失”的原因为了,因为这时候 Cusor 跑到错误的坐标值上去了,当然就消失了
3:经常点 MiniGUI 的菜单却没有响应,其实还是上面 2 的原因,菜单的响应是当你的手离开触摸屏后,会产生一个 MSG_LBUTTONUP 消息,在这个消息中会调用 PtInRect()检查这时候的点击位置是否在菜单上,如果在的话,菜单就会触发一个 MSG_COMMAND 消息,于时菜单就会显示出来,其实 MiniGUI 中对所有的点击都是这样处理的。(自己看看 MiniGUI 的源代码就会明白了)。因为我的便宜屏在手快要离开触摸屏时得到的坐标是错误的,所以这时候 PtInRect() 就会返回错误的值,就好像我点在屏的别的地方了一样,所以这时候菜单根本得不到消息。
根据以上原因,我对 MiniGUI 1.3.3 版本中的 2410 的 IAL 程序进行了修改,使得它在我的 便宜屏 上一样可以正常工作。它提供了去抖动功能,就是点击时一头一尾那两下的不准确的值不能要,同时提供了一个方便的屏幕校准程序,你只需要做小小的修改就可以校准让它在你的 便宜屏 上很好的正常工作了。
共分享92篇相关文档