Windows下的C++程序员在开发图形用户界面时,首先想到可能就是MFC了.对于GTK+这种GNU/Linux上出生出来的东西,就感到陌生了.GTK+是类似于MFC的图形界面库,跟MFC不同的是,它不是用C++,而是用C语言实现了面对对象的机制,但能与许多语言绑定,并具有跨平台的特性.比如与Python的结合,就产生PyGTK,"初识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 阅读(3568) |
评论 (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 阅读(1762) |
评论 (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 阅读(10163) |
评论 (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 阅读(4242) |
评论 (0) |
编辑 收藏