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.
設置完好后,你就可以編譯運行了,一個什么都不干的丑陋的windows窗體出現你面前了.若編譯不通過,缺少某些頭文件的話,查看出錯信息,然后用windows查找對應頭文件路徑,再設置.若連接出錯,很可能在設置庫文件出錯了,同理,設置相應的庫文件路徑.程序代碼很簡單,定義一個windows窗體指針,然后創建窗體和定義窗體標題,接著就是顯示了,和gtk主循環了.
讓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)可用不了.右擊你需要加密的文件和文件夾,選擇"屬性",然后點擊"屬性"對話框的"高級...",在"高級屬性"中勾選上"加密內容以便保護數據"即可.如果不想加密了的話,去掉勾選即可.
? 
?
小Q:好了,這么簡單,學會了.
小A:還沒有好呢,再跟你說點.不然到時候,你重裝系統,打不開加密的文件又要哭了.我說過這EFS是用公鑰策略的,如果沒有私鑰是你是打不開加密過的文件.然而你重裝系統后,原來私鑰是由用戶信息加密過的,即使你重新取了相同的用戶名還是不行的.所以呀,你要裝原先的密鑰提前備份好,這樣加密過的文件,無論在你的電腦里,還是轉移到其他NTFS的格式的硬盤里,都可以打開.密鑰是與證書關聯的,這樣我們就要做好證書的備份工作.我簡要說下證書備份吧.在開始菜單的"運行"中輸入certmgr.msc,打開證書管理終端,在個人-證書中,會看到一個預期目的為"加密文件系統"的證書,這是在第一次使用加密后自動生成的.右擊該證書,在所有任務中,選擇"導出...",通過證書導出向導,按照提示選擇對應的選項即可.
在輸入密碼,選擇存儲位置后,你會看到你所取名的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) |
編輯 收藏