上网直通车UnitPass开发总结

前言:

      由于学校更换了上网系统,所以以前的上网直通车都不能用了。然后,一开机,要上外网就要先开个浏览器,再随便浏览个外网的网址,该系统判断你是初次登录外网后即会弹出上网的登录窗口(这个是挺不错的),让你登录的了。但是,只是想登录个QQ,或者用Foxmail收一下Gmail的邮件,然后你却必须打开浏览器,那就挺不爽的了。所以,我决定针对该系统开发新的上网直通车,一来方便自己,二来完成自己的心愿(在用旧系统的时候,就准备搞搞这个的了^_^),三来借此复习一下MFC(因为接下来的一个项目要用MFC,但是现在由于技术原因改为Java了,%>_<%)。废话少说,入正文啦。

 

 

正文:

     在此次的开发中,遇到了一些我觉得是有必要记下的问题,有些问题属于细节类型的(如果你不注意,那你就会给它弄的很惨,然后不断臭骂MFC烂的了),有些问题属于解决方案的(是很不错的方案哦/(^o^)/~)。这些问题如下:

 

     1、注意Spin控件的属性设置!

     在VC中如何实现NumericUpDown control的功能?在网上看到大多资料都是类似如下:

    (1)、在对话框中放入一个Spin控件和一个编辑控件作为Spin控件的伙伴窗口。
           选择Spin控件属性: Auto BuddySet buddy integer、Arrow keys。设置文本控件属性:Number。
     (2)、用ClassWizard为Spin控件定义变量m_Spin,为编辑控件定义变量m_Edit,定义时注意要把m_Edit设置为int型。
     (3)、在对话框的OnInitDialog()函数中加入语句:
     BOOL CMyDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
        m_Spin.SetBuddy( GetDlgItem( IDC_EDIT1 ) ); //设置编辑控件为Spin控件的伙伴窗口
        m_Spin.SetRange( 0, 10 ); //设置数据范围为0-10
       return TRUE;
    }
    (4)、用ClassWizard为编辑控件添加EN_CHANGE消息处理函数,再加入语句:
    void CMyDlg::OnChangeEdit1()
   {
       m_Edit = m_Spin.GetPos(); //获取Spin控件当前值
   }

 

 

    按以上步骤弄好后,NumericUpDown control的功能实现了,一切都似乎很顺利。但是在之后的某一次编译,你会突然发现一些别的控件上的文字变成了乱码,成了“口”这个样子。然后,你根本找不到错误,然后,你的心情给搞臭了。而这一切的始作俑者是你选择了Spin控件属性: Auto Buddy。正是这个属性影响了编译器对其他控件的处理。只要你去掉这个属性,一切又变得完美了。

 

      2、在回调函数中修改对话框的属性?

     在程序中,我需要借助定时器去实现一些功能,如我需要程序每隔一段时间就检查一次看账号是否仍在线,如果不在线,对话框就需要作出一定的反应,如改变托盘的图标等。

     在本程序,我选择了定时器与回调函数合作的方式。但是在VC中,回调函数只能是全局函数或者静态成员函数。而在对话框初始化前,回调函数就已经“登场”了,所以在回调函数中,是不可能修改的了对话框的属性!那怎么做呢?这时微软那一套消息机制就很有用了。我定义了自己的消息,然后让回调函数按照设定好的时间(由SetTimer设置)像对话框发送消息,对话框接到消息后,就进行相应操作,如检查账号是否在线,不在线就先执行注销操作,然后弹出桌面并告知用户。

     在此,真的要对微软的这一套消息机制表示尊敬和赞赏。要知道,Windows里的消息何其多哉!Windows系统和Widows程序能在极短时间内判断出接收到的是什么消息,然后执行相应操作,这是多么厉害的。所以,无论喜欢或不喜欢Windows,都应该给这美妙的一套予以尊敬——好的对手是值得尊敬的!如果想对这一机制有更多了解,可参考《深入浅出MFC(第二版)》中的第三章的Message Mapping和Command Routing。

   

      3、VC里出现的Debug Assertion Failed 错误

    (1)按F5运行你的程序
    (2)在出错时,选择“重试”
    (3)按ALT+7调出“调用栈”窗口
    (4)双击从上往下的最近一个自己定义的函数,系统会自动把该函数所在的文件显示出来,此时程序就暂停在光标处。一般来说错误就出在这附近。你可以通过查看变量的值来确认 。

      很多时候,应该学会去掌握调试自己的程序,虽然很辛苦。

心得体会:

     编译好自己的Release版本,发现程序才76kb。It's so small!于是,更加觉得不选择用C#等更高级的面向对象语言开发是对的,因为这些开发出来的东西绝对是没这么小的,也没这么快!同时,我认为,现在的编程语言变得越来越高级,越来越智能化了(或说人性化),程序员也就越来越民工化了,在不久,可能就是个填充代码的民工,更甚者可能已经不需要你去填充代码了,如果将来软件能自动生成人们所需要的软件(我想这是不会很久的事)。所以,从现在起应该要往高级走,技术要向哲学看齐,我可不要做填充代码的民工。

成果展览(最新版本V1.2  /(^o^)/~):

初次登陆界面

登陆成功后

上网直通车UnitPass开发总结_第1张图片

查询流量

注销成功后

上网直通车UnitPass开发总结_第2张图片

右键菜单

关于UnitPass

上网直通车UnitPass开发总结_第3张图片

你可能感兴趣的:(windows,浏览器,command,Integer,mfc,Gmail)