• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 24,  comments - 62,  trackbacks - 0

            Windows下的C++程序員在開發圖形用戶界面時,首先想到可能就是MFC了.對于GTK+這種GNU/Linux上出生出來的東西,就感到陌生了.GTK+是類似于MFC的圖形界面庫,跟MFC不同的是,它不是用C++,而是用C語言實現了面對對象的機制,但能與許多語言綁定,并具有跨平臺的特性.比如與Python的結合,就產生初識PyGTK"就介結了其在Windows平臺的安裝.

            在Windows開發GTK+的應用程序,首先需要其在Windows版本下的庫文件,下載gladewin32項目中的gtk+-win32-devel安裝包進行安裝.我這里使用VS2005進行配置,因為相對于其他的環境,大家對于此IDE更為熟悉.接下來我將一步步介紹我在對GTK/Glande3說Hello時碰到的問題與解決方法.

            丑陋的Hello World

            任何像我一樣急切的人,都希望用最少的代碼,看一下GTK+的世界是怎么樣的.新建一"Win32 項目",然后向其添加gtk.c文件.

            /*  file gtk.c  */ 
            #include  < gtk / gtk.h > 
            
            int  main( int  argc,  char *  argv[])
            {
                GtkWidget *  window;
                gtk_init ( & argc,  & argv);
            
                window  =  gtk_window_new (GTK_WINDOW_TOPLEVEL);
                
                gtk_window_set_title (GTK_WINDOW (window),  " Hello World " );
                gtk_widget_show (window);
                gtk_main();
            
                return   0 ;
            } 
            

            現在麻煩的事情到了,設置相關的頭文件和庫文件.設置頭文件,右鍵點擊項目名,然后選擇屬性.然后在"常規"-"附加包含目錄"中設置你安裝gtk+-win32-devel時對應的頭文件目錄.然后再設置庫文件,需要gtk-win32-2.0.lib,glib-2.0.lib,gobject-2.0.lib.

            p1_4.jpg
            p2_thumb.jpg p3_thumb.jpg

            設置完好后,你就可以編譯運行了,一個什么都不干的丑陋的windows窗體出現你面前了.若編譯不通過,缺少某些頭文件的話,查看出錯信息,然后用windows查找對應頭文件路徑,再設置.若連接出錯,很可能在設置庫文件出錯了,同理,設置相應的庫文件路徑.程序代碼很簡單,定義一個windows窗體指針,然后創建窗體和定義窗體標題,接著就是顯示了,和gtk主循環了.

            p4_2.jpg

            讓GTK+有點知覺

            或許你發現了,點擊窗體中的"X"關閉按鈕,雖然窗體消失了,但是黑色的命令窗口還在,發現"任務管理器"中程序還在運行著.對,它并沒有像你想的那樣,在點擊"X"關閉按鈕結束掉程序.這些是需要你告訴程序該怎么做的.我們需要在代碼中添加相應的事件處理函數. 新增加了destroy函數,它就是事件處理函數,在gtk也可叫做信號處理函數,因為gtk中用信號來進行事件的通知.destory函數的形參是有約定寫法的,這個大家可以參見具體的手冊.在主程序中,還需要將這一函數與具體的信號進行關聯,見第17行.

            在完成這些工作后,你再點擊"X"按鈕時,會發現"命令行窗口"會出現"按任意鍵繼續",程序是真正地退出了.

            /* file gtk.c */
            #include 
            static void destroy( GtkWidget *widget,
                                gpointer   data )
            {
                gtk_main_quit ();            //退出gtk主循環
            }
            
            int main(int argc, char* argv[])
            {
            
                GtkWidget* window;
                gtk_init (&argc, &argv);
            
                window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
                
                gtk_window_set_title (GTK_WINDOW (window), "Hello World");
                g_signal_connect (G_OBJECT (window), "destroy",    G_CALLBACK (destroy), NULL);
            
                gtk_widget_show (window);
                gtk_main();
            
            
                return 0;
            }
            

            讓黑黑的命令行窗口消失

            有些人會對這個gtk應用程序總會伴隨著黑黑的命令行窗口感到不爽,包括我自己在內.不知道gtk程序在gnome下也是這樣,我沒有試過,不知道.現在我就使用windows平臺的特定方法,來讓它消失吧,就是使用WinMain做為主函數.這方法或許不是最正規的做法,但我看來卻有效.如果要考慮到跨平臺的話,可以用條件編譯處理下.

            /* file gtk.c */
            #include 
            #include 
            static void destroy( GtkWidget *widget,
                                gpointer   data )
            {
                gtk_main_quit ();            //退出gtk主循環
            }
            
            int WinMain(HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,
                        int nCmdShow
                        )
            {
                //為應付gtk_init所需要的參數
                int argc=1;    
                char* commandLine={"gtkApplication"};
                char** argv = &commandLine;
            
                GtkWidget* window;
                gtk_init (&argc, &argv);
            
                window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
                
                gtk_window_set_title (GTK_WINDOW (window), "Hello World");
                g_signal_connect (G_OBJECT (window), "destroy",    G_CALLBACK (destroy), NULL);
            
                gtk_widget_show (window);
                gtk_main();
            
            
                return 0;
            }
            
            

            好啦,現在再編譯運行,命令行窗口沒有了.你會發現真正的win32窗體了.但是在開發中,我建議用gtk時,還是讓命令行窗口顯示出來,因為gtk在出錯時,會把一些有用的信息打到命令行窗口中,這對你的幫助會很大.

            posted @ 2008-03-23 15:18 len 閱讀(3596) | 評論 (3)編輯 收藏

            自從去年底娛樂圈曝出了"艷照門"事件后, 小Q就開始注意自己的私密文件了,在網上google加密軟件,想把那些珍藏的AV小電影和情感小日記加密起來,防止一個不小心被人公布.網上的私人出品的小加密軟件不敢用,怕被別人留了后門,至于安全性也沒有保證.后在網上經高手指點,使用WinRAR軟件的加密功能,把一個個文件壓縮成包,并設置了密碼.這東西倒是簡單,但是小Q常常需要回顧一下這些小電影,以解單身之苦,偶爾又寫下日記.這樣一來,常常就需要輸入密碼,解壓,解渴,壓縮,麻煩又耗時,且WinRAR密碼又不能太簡單,不然有被暴力破解的可能.

            小Q又在忙活了,湊巧被密友小A看到,將情況如實向小A說了.小A是個計算機迷,知道小Q需求后,立即問到:你怎么不用Windows自帶的EFS加密呀?

            小Q:什么是EFS加密呀?

            小A:EFS阿,就是Encryption File System,反正跟你說英語也不清楚,就是加密文件系統,是Windows 2000開始所特有的一個實用功能,對于NTFS卷上的文件和數據,都可以直接被操作系統加密保存.EFS加密是基于公鑰策略的,安全的很.

            小A就是這樣喜歡賣弄一下英語和專業詞匯,這樣才顯得水平高.

            小Q:那你說的公鑰策略是什么呀?

            小A:公鑰要這可要從加密領域說起.就拿你用WinRAR加密文件來說吧,WinRAR是使用DES對稱加密算法,也就是加解密都是用同一個密碼.還再教你個新詞,搞計算機的人,密碼不叫密碼,要說成密鑰,相當于開鎖的鑰匙,這樣才顯得X.而公鑰策略呢,加解密不是用同一密碼,一般加密的叫公鑰,解密的叫私鑰.

            小Q:阿,弄得這么麻煩呀,那我給文件加個密后,輸入密碼后,怎么知道私鑰是什么呀?

            小A:這個EFS加密呀,不用你輸入密碼.它在加密時,會自動為你生成公鑰和私鑰,公鑰和私鑰的長度很長.打個比方,如果你平時用到密碼很長很復雜,你會怎么辦呢?是不是把密碼抄在本子什么的,然后用到的時候拿出來看呀.這公鑰和密鑰的信息就跟所謂的證書綁定在一起了,也就相當于小本子.

            小Q:阿,私鑰自動生成放在電腦里,那不是相當于還是沒有加過密,不安全呀?

            小A:私鑰是放在你的硬盤上,但是windows用你的帳戶信息為依據又加了層密.如果你能用你的用戶帳號登陸系統,也就完成了驗證工作.如果你用另外個帳號登陸的話,那些EFS加密過的文件,就無權獲取了.即使你不通過windwos系統,獲得了存儲密鑰的物理空間,也是無法進行解密的.這樣才顯得安全.

            小Q:你說得這些,我也不是怎么懂,就說說怎么用這個EFS吧.

            小A:好的.這個EFS呀,正如我上面所說的,要在Windows2000以上的系統才可以,還有一點,這樣高級的功能,家庭版(windows xp home, windows vista home)可用不了.右擊你需要加密的文件和文件夾,選擇"屬性",然后點擊"屬性"對話框的"高級...",在"高級屬性"中勾選上"加密內容以便保護數據"即可.如果不想加密了的話,去掉勾選即可.

            p1 ? p2

            ?

            小Q:好了,這么簡單,學會了.

            小A:還沒有好呢,再跟你說點.不然到時候,你重裝系統,打不開加密的文件又要哭了.我說過這EFS是用公鑰策略的,如果沒有私鑰是你是打不開加密過的文件.然而你重裝系統后,原來私鑰是由用戶信息加密過的,即使你重新取了相同的用戶名還是不行的.所以呀,你要裝原先的密鑰提前備份好,這樣加密過的文件,無論在你的電腦里,還是轉移到其他NTFS的格式的硬盤里,都可以打開.密鑰是與證書關聯的,這樣我們就要做好證書的備份工作.我簡要說下證書備份吧.在開始菜單的"運行"中輸入certmgr.msc,打開證書管理終端,在個人-證書中,會看到一個預期目的為"加密文件系統"的證書,這是在第一次使用加密后自動生成的.右擊該證書,在所有任務中,選擇"導出...",通過證書導出向導,按照提示選擇對應的選項即可.

            p3 p4

            在輸入密碼,選擇存儲位置后,你會看到你所取名的xxx.pfx文件.下次你重裝系統或在別的機子要打開加密的文件,只要要雙擊.pfx文件,按向導導入即可.這個.pfx文件可要保存好,不要讓人拿去了.這個文件相當于鑰匙,誰有這把鑰匙,誰就能打開加密文件了.

            ?

            posted @ 2008-03-16 15:37 len 閱讀(1864) | 評論 (3)編輯 收藏

            PyGTK讓你用Python輕松創建具有圖形用戶界面的程序.底層的GTK+提供了各式的可視元素和功能,如果需要,你能開發在GNOME桌面系統運行的功能完整的軟件.

            PyGTK真正具有跨平臺性,它能不加修改地,穩定運行各種操作系統之上,如Linux,Windows,MacOS等.除了簡單易用和快速的原型開發能力外,PyGTK還有一流的處理本地化語言的獨特功能.

            PyGTK是自由軟件,所以你能幾乎沒有任何限制的使用,修改,分發,研究它,它是基于LGPL協議發布的.

            如果你對上面提到的GTK+,也不了解的話,那允許再對它也進行一番介紹.GTK+,用C語言開發的,具有跨平臺的GUI庫,它是GNOME桌面系統(如果你在用Linux,一定不陌生)和GIMP圖象編輯器的開發工具箱.它是世界上許多程序員的選擇,對他們來說,國際化的支持是必要的,而且性能也總是他們考慮的因素.與GTK同一領域的還有Qt庫,它是由商業公司開發的C++圖形庫,雖然它也有免費的.

            在windows平臺的安裝和開發

            安裝PyGTK只需執行下列步驟:

            或許你對這些步驟還感到麻煩,或者對Python不熟悉的話,那也沒有關系,直接下載一鍵安裝包all-in-one installer,為你配置好全部運行時環境.

            看看開發環境是否配置正確,將下列代碼作為Python腳本或者在Python交互控制臺下輸入.如果正確的話,應該有一個標題為"Hello World"的windows的空窗口呈現在你面前.

            如果不能運行的話,有可能會出現一個不能成功加載dll的錯誤提示,這是因為缺少iconv.dll.這時需要只需從網上下載過來,拷貝至windows/system32目錄下即可了.

            import gtk
            window = gtk.Window()
            window.set_title("Hello World")
            window.show_all()
            
            gtk.main()
            
            posted @ 2008-03-12 19:43 len 閱讀(10193) | 評論 (3)編輯 收藏

            PC-lint for C/C++是由Gimpel軟件公司于1985年開發的代碼靜態分析工具,它能有效地發現程序語法錯誤、潛在的錯誤隱患、不合理的編程習慣等。

            FlexeLint for C/C++是在PC_lint在windows平臺獲得成功后,同樣由Gimpel公司開發的,以源代碼形式發布的,在Unix/Linux平臺上的靜態代碼分析工具。

            本文主要介紹PC-lint的安裝與配置,因此是在windows平臺上進行討論。

            PC-lint支持幾乎所有流行的編譯器和IDE環境,可能因為其發展歷史和面對專業程序員群體的原因,它是以命令行加配置文件的形式進行使用,所以其使用習慣跟現在常見的windows軟件不同。

            現以PC-lint與VS2005進行集成來說明:

            將PC-lint釋放到某一目錄下,如:D:\Program Files\pclint.將新建一std.lnt文件在主目錄中,并將添加上以下的內容

            au-sm.lnt
            co-msc80.lnt
            lib-mfc.lnt
            lib-stl.lnt
            lib-w32.lnt
            lib-wnt.lnt
            lib-atl.lnt
            options.lnt  -si4 -sp4
            
            -i "C:\Program Files\Microsoft Visual Studio 8\VC\include"
            -i "C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include"
            -i "C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include"
            -i "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include"
            

            注意:-i后面為相應的vc頭文件目錄路徑,而一系列xxx.lnt是語法配置規則,決定了按什么規則進行檢查,以后可以根據需要進行增減. 寫在配置文件中相應的的xxx.lnt從lnt子目錄中,拷貝到主目錄中.(這一步很重要) 在vs2005中的工具->外部工具中,點擊"添加",新建一個外部工具.標題可以任意,可取(pc_lint);命令為:D:\Program Files\pclint\LINT-NT.EXE;參數為:-i"D:\Program Files\pclint" std.lnt "$(ItemFileName)$(ItemExt)";初始目錄為:$(ItemDir),并將下面的"使用輸出窗口"勾選上. 接下來,就可以寫一段程序,在工具菜單中選擇pc_lint 來進行檢查了.如果你編寫的程序有不符合定義的規范,則會在輸出窗口中出現相關的信息.

            posted @ 2008-01-30 15:18 len 閱讀(4264) | 評論 (0)編輯 收藏
            僅列出標題
            共3頁: 1 2 3 

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲天堂久久精品| av无码久久久久不卡免费网站| 精品久久久无码中文字幕| 国产免费福利体检区久久| 亚洲欧美国产精品专区久久| 久久国语露脸国产精品电影| www.久久热| 色婷婷久久久SWAG精品| 久久国产精品77777| 日本精品一区二区久久久| 国产精品免费福利久久| 久久青青国产| 99久久精品无码一区二区毛片 | 久久精品一本到99热免费| 久久狠狠高潮亚洲精品| 亚洲国产精品成人AV无码久久综合影院| 狠狠色综合网站久久久久久久高清 | 欧美激情精品久久久久久久九九九| 中文字幕人妻色偷偷久久 | 成人国内精品久久久久影院| 欧美一级久久久久久久大片| 欧美激情精品久久久久| 久久精品夜夜夜夜夜久久| 欧美一区二区久久精品| 久久精品综合一区二区三区| 久久成人精品视频| 精品久久人妻av中文字幕| 久久人妻少妇嫩草AV蜜桃| 亚洲伊人久久综合影院| 久久综合九色综合久99| 久久久亚洲精品蜜桃臀| 久久久国产精品| 欧美精品一区二区久久| 日日狠狠久久偷偷色综合0| 欧美久久一区二区三区| 久久综合久久性久99毛片| 热综合一本伊人久久精品| 久久午夜免费视频| 久久精品国产免费观看三人同眠| 国产精品久久婷婷六月丁香| 久久只这里是精品66|