久久久久久久麻豆,中日韩av在线,麻豆av在线免费,中文字幕二区三区,欧美日韩视频一区二区,亚洲欧美日韩在线一区,国产无毒不卡

嵌入式Linux下MiniGUI的軟件開發(fā)


兩個頭文件。
    
    編程實現(xiàn)時,MiniGUI的程序入口點是MiniGUIMain函數(shù),系統(tǒng)初始化后就會自動找到該函數(shù)。在該函數(shù)中先設(shè)置主窗口一些基本屬性,建立每個客戶程序唯一的一個消息隊列。當(dāng)程序結(jié)束時,調(diào)用MainWindow ThreadCleanup函數(shù),清除主窗口所使用的消息隊列系統(tǒng)資源,退回服務(wù)器程序中。 
    各個功能子函數(shù)是在MiniGUI程序的另一主體部分——主界面窗口的過程函數(shù)中調(diào)用打開的。在主窗口建立時,其中有一項屬性MainWindowProc,即是注明了對應(yīng)該窗口的過程函數(shù)。各個功能模塊的消息也都是通過主窗口中的消息循環(huán)進行觸發(fā)的。
    窗口過程函數(shù)主體上都是switch和case結(jié)構(gòu)的選擇語句,針對不同的消息產(chǎn)生不同的響應(yīng)。一般MSG_CREATE消息在窗口生成時被發(fā)送,因而控件往往在這里調(diào)用CreateWindow函數(shù)生成。MSG_PAINT則是在移動窗口或調(diào)用UpdateWindow重繪時發(fā)生,可根據(jù)需要定義相應(yīng)的操作。MSG_CLOSE即是關(guān)閉窗口時的動作,一般調(diào)用DestroyMainWindow銷毀主窗口,調(diào)用PostQuitMessage退出消息循環(huán)。
    此外,在窗口過程函數(shù)MiniGUI提供的GDI,即圖形設(shè)備接口(graphics device interface),可以方便地將BMP、GIF、JPEG等圖片用LoadBitmap函數(shù)輸出到界面,并通過設(shè)備上下文(DC)的邏輯  
字體(logfont)實現(xiàn)多字體和多字符集支持。
    廣告進程的制作也類似,不再說明。
    (2)信息終端軟件服務(wù)器程序
    因為服務(wù)器和客戶程序需要交換數(shù)據(jù),所以我們使用了經(jīng)MiniGUI包裝過的Socket通信機制。
    在服務(wù)器中,建立一個監(jiān)聽套接字:
    #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);
    }
    服務(wù)器監(jiān)聽該套接字listen_fd。當(dāng)客戶有連接請求時,服務(wù)器的過程函數(shù)中就會收到MSG_FDEVENT消息,服務(wù)器就可以接受該請求以進行相應(yīng)處理:
    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;
    }}
    在主界面進程中,需要連接到服務(wù)器時,可以通過cli_conn(LISTEN_SOCKET,‘b‘)來提出請求。
    這樣,服務(wù)器和客戶程序之間即可相互交流數(shù)據(jù)了。
    廣告進程實現(xiàn)時,需要在服務(wù)器中設(shè)置事件鉤子函數(shù)SetServerEventHook(my_event_hook)。因為廣告屏保是在沒有鍵盤鼠標(biāo)輸入的一段時間后自動打開的,有任意鍵時又自動關(guān)閉,所以只有始終運行在后臺的服務(wù)器才能判斷廣告是否要打開關(guān)閉。
    可以在消息循環(huán)時進行判斷:
    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是前一次消息的時間。當(dāng)從GetTickCount()得到的當(dāng)前時間大于設(shè)定值時,還沒有任何消息的話,廣告屏保scrnsaver程序就啟動,同時隱蔽鼠標(biāo)光標(biāo)。
    當(dāng)系統(tǒng)又接收到事件時,會自動執(zhí)行前面注冊過的事件鉤子函數(shù)。在該函數(shù)中,使用kill(pid_scrnsaver,SIGINT)命令關(guān)閉廣告程序,并顯示鼠標(biāo)即可。
    
    將完成的C語言程序文件用交叉編譯工具編譯,并鏈接MiniGUI庫文件,即可生成所需的可執(zhí)行文件。
    結(jié)  語
    將嵌入式Linux應(yīng)用至信息家電類產(chǎn)品中,并開發(fā)出優(yōu)秀的人機交互界面,是嵌入式發(fā)展的趨勢,擁有廣闊的市場前景。本系統(tǒng)開發(fā)的嵌入式信息終端也已初見成效,相信這種方案必將得到越來越多的應(yīng)用。

COPYRIGHT(C) 2011 廈門永宏亞得機電科技有限公司版權(quán)所有(閩ICP備05025945號) ALL RIGHTS RESERVED?

電話: 0592-5190891 傳真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 廈門市海滄區(qū)興港六里17號2607室 郵編:361009 聯(lián)系人:翟先生