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

            在Windows開發(fā)GTK+的應(yīng)用程序,首先需要其在Windows版本下的庫文件,下載gladewin32項目中的gtk+-win32-devel安裝包進(jìn)行安裝.我這里使用VS2005進(jìn)行配置,因為相對于其他的環(huán)境,大家對于此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 ;
            } 
            

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

            p1_4.jpg
            p2_thumb.jpg p3_thumb.jpg

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

            p4_2.jpg

            讓GTK+有點知覺

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

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

            /* file gtk.c */
            #include 
            static void destroy( GtkWidget *widget,
                                gpointer   data )
            {
                gtk_main_quit ();            //退出gtk主循環(huán)
            }
            
            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應(yīng)用程序總會伴隨著黑黑的命令行窗口感到不爽,包括我自己在內(nèi).不知道gtk程序在gnome下也是這樣,我沒有試過,不知道.現(xiàn)在我就使用windows平臺的特定方法,來讓它消失吧,就是使用WinMain做為主函數(shù).這方法或許不是最正規(guī)的做法,但我看來卻有效.如果要考慮到跨平臺的話,可以用條件編譯處理下.

            /* file gtk.c */
            #include 
            #include 
            static void destroy( GtkWidget *widget,
                                gpointer   data )
            {
                gtk_main_quit ();            //退出gtk主循環(huán)
            }
            
            int WinMain(HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,
                        int nCmdShow
                        )
            {
                //為應(yīng)付gtk_init所需要的參數(shù)
                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;
            }
            
            

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

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

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

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

            小Q:什么是EFS加密呀?

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

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

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

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

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

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

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

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

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

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

            p1 ? p2

            ?

            小Q:好了,這么簡單,學(xué)會了.

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

            p3 p4

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

            ?

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

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

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

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

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

            在windows平臺的安裝和開發(fā)

            安裝PyGTK只需執(zhí)行下列步驟:

            • 安裝Python2.4或以上的windows版本[www.python.org]
            • 從GTK+/Glade的windows版本的GTK+ 2.10開發(fā)運行時環(huán)境[gladewin32.sourceforge.net]
            • 從PyGTK網(wǎng)站下載安裝PyCairo,PyGobject和PyGTK安裝包,注意這些需全部安裝才能使PyGTK工作[pygtk.org]

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

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

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

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

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

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

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

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

            現(xiàn)以PC-lint與VS2005進(jìn)行集成來說明:

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

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

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

            <2008年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久国产日韩精品网站| 日产精品久久久久久久性色| 亚洲精品乱码久久久久久蜜桃| 亚洲午夜精品久久久久久浪潮| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 亚洲精品乱码久久久久久蜜桃| 亚洲av成人无码久久精品| yellow中文字幕久久网| 伊人久久综合精品无码AV专区| 蜜臀久久99精品久久久久久小说 | 青青热久久国产久精品 | 久久久无码精品亚洲日韩蜜臀浪潮| 91精品国产高清久久久久久国产嫩草 | 亚洲中文精品久久久久久不卡| 国产ww久久久久久久久久| 精品人妻久久久久久888| 中文成人久久久久影院免费观看| 久久精品国产99国产电影网 | 久久99国产精品一区二区| 久久婷婷色综合一区二区| 亚洲AV伊人久久青青草原| 国产999精品久久久久久| 2021久久国自产拍精品| 少妇内射兰兰久久| 亚洲色大成网站WWW久久九九| 久久亚洲天堂| 免费一级做a爰片久久毛片潮| 99久久亚洲综合精品成人| 久久亚洲精品国产精品| 日本人妻丰满熟妇久久久久久| 热99RE久久精品这里都是精品免费 | 久久久一本精品99久久精品66| 亚洲国产综合久久天堂| 日批日出水久久亚洲精品tv| 久久精品国产精品亚洲人人| 久久www免费人成精品香蕉| 99久久国产综合精品成人影院| 中文字幕亚洲综合久久| 精品乱码久久久久久夜夜嗨| 精品人妻伦九区久久AAA片69 | 香蕉久久夜色精品国产尤物|