嵌入式Linux下MiniGUI的软件开发


两个头文件。
    
    编程实现时,MiniGUI的程序入口点是MiniGUIMain函数,系统初始化后就会自动找到该函数。在该函数中先设置主窗口一些基本属性,建立每个客户程序唯一的一个消息队列。当程序结束时,调用MainWindow ThreadCleanup函数,清除主窗口所使用的消息队列系统资源,退回服务器程序中。 
    各个功能子函数是在MiniGUI程序的另一主体部分——主界面窗口的过程函数中调用打开的。在主窗口建立时,其中有一项属性MainWindowProc,即是注明了对应该窗口的过程函数。各个功能模块的消息也都是通过主窗口中的消息循环进行触发的。
    窗口过程函数主体上都是switch和case结构的选择语句,针对不同的消息产生不同的响应。一般MSG_CREATE消息在窗口生成时被发送,因而控件往往在这里调用CreateWindow函数生成。MSG_PAINT则是在移动窗口或调用UpdateWindow重绘时发生,可根据需要定义相应的操作。MSG_CLOSE即是关闭窗口时的动作,一般调用DestroyMainWindow销毁主窗口,调用PostQuitMessage退出消息循环。
    此外,在窗口过程函数MiniGUI提供的GDI,即图形设备接口(graphics device interface),可以方便地将BMP、GIF、JPEG等图片用LoadBitmap函数输出到界面,并通过设备上下文(DC)的逻辑  
字体(logfont)实现多字体和多字符集支持。
    广告进程的制作也类似,不再说明。
    (2)信息终端软件服务器程序
    因为服务器和客户程序需要交换数据,所以我们使用了经MiniGUI包装过的Socket通信机制。
    在服务器中,建立一个监听套接字:
    #define LISTEN_SOCKET "/var/tmp/socket1"
    static int listen_fd;
    BOOL listen_socket(HWND hwnd)
    { if((listen_fd=serv_listen(LISTEN_SOCKET))<0)
    return FALSH;
    return RegisterListenFD(listen_fd,POLLIN,hwnd,NULL);
    }
    服务器监听该套接字listen_fd。当客户有连接请求时,服务器的过程函数中就会收到MSG_FDEVENT消息,服务器就可以接受该请求以进行相应处理:
    static int MainFunProc(HWND hWnd,
    { switch(message)
    {case MSG_FDEVENT:
    if(LOWORD(wParam)= =listen_fd){
    ……
    conn_fd=serv_accept(listen_fd,&uid);
    if(conn_fd>0){
    sock_read(conn_fd,buff[20>,40);
    ……
    sock_write(conn_fd,buff[20>,40);
    }}
    break;
    }}
    在主界面进程中,需要连接到服务器时,可以通过cli_conn(LISTEN_SOCKET,‘b‘)来提出请求。
    这样,服务器和客户程序之间即可相互交流数据了。
    广告进程实现时,需要在服务器中设置事件钩子函数SetServerEventHook(my_event_hook)。因为广告屏保是在没有键盘鼠标输入的一段时间后自动打开的,有任意键时又自动关闭,所以只有始终运行在后台的服务器才能判断广告是否要打开关闭。
    可以在消息循环时进行判断:
    while(GetMessage(&Msg,HWND_DESKTOP))
    {if (pid_scrnsaver= =0&&GetTickCount()>
    old_tick_count+1000){
    ShowCursor(FLASE);
    pid_scrnsaver=exec_app("./scrnsaver","crnsaver");
    }
    DispatchMessage(&Msg);
    }
  
    dld_tick_count是前一次消息的时间。当从GetTickCount()得到的当前时间大于设定值时,还没有任何消息的话,广告屏保scrnsaver程序就启动,同时隐蔽鼠标光标。
    当系统又接收到事件时,会自动执行前面注册过的事件钩子函数。在该函数中,使用kill(pid_scrnsaver,SIGINT)命令关闭广告程序,并显示鼠标即可。
    
    将完成的C语言程序文件用交叉编译工具编译,并链接MiniGUI库文件,即可生成所需的可执行文件。
    结  语
    将嵌入式Linux应用至信息家电类产品中,并开发出优秀的人机交互界面,是嵌入式发展的趋势,拥有广阔的市场前景。本系统开发的嵌入式信息终端也已初见成效,相信这种方案必将得到越来越多的应用。

COPYRIGHT(C) 2011 厦门永宏亚得机电科技有限公司版权所有(闽ICP备05025945号) ALL RIGHTS RESERVED?

电话: 0592-5190891 传真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 厦门市海沧区兴港六里17号2607室 邮编:361009 联系人:翟先生