posts - 24,  comments - 62,  trackbacks - 0

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.

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 阅读(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)可用不了.右击你需要加密的文件和文件夹,选择"属性",然后点击"属性"对话框的"高级...",在"高级属性"中勾选上"加密内容以便保护数据"即可.如果不想加密了的话,去掉勾选即可.

p1   p2

 

小Q:好了,这么简单,学会了.

小A:还没有好呢,再跟你说点.不然到时候,你重装系统,打不开加密的文件又要哭了.我说过这EFS是用公钥策略的,如果没有私钥是你是打不开加密过的文件.然而你重装系统后,原来私钥是由用户信息加密过的,即使你重新取了相同的用户名还是不行的.所以呀,你要装原先的密钥提前备份好,这样加密过的文件,无论在你的电脑里,还是转移到其他NTFS的格式的硬盘里,都可以打开.密钥是与证书关联的,这样我们就要做好证书的备份工作.我简要说下证书备份吧.在开始菜单的"运行"中输入certmgr.msc,打开证书管理终端,在个人-证书中,会看到一个预期目的为"加密文件系统"的证书,这是在第一次使用加密后自动生成的.右击该证书,在所有任务中,选择"导出...",通过证书导出向导,按照提示选择对应的选项即可.

p3 p4

在输入密码,选择存储位置后,你会看到你所取名的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)编辑 收藏
仅列出标题
共3页: 1 2 3 

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(4)

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜