毕业设计(简易网络协议分析器)编写历程(三)

悲剧啊~~~刚才刚写好的博文,发布的时候,内容居然莫名其妙的没了~~难道是用chrome的问题???啊啊啊啊啊~~~我用火狐在写一遍好了

3月18日

离上次更新过了两天了,今天稍微做了一点。大体上完成了,设备信息显示那一部分。

先看看成果

主要遇到了几个问题。

1.如何动态改变对话框的caption属性

解决方式:使用setwindowtext

我的代码

  
  
  
  
  1. BOOL CDevStatus::OnInitDialog(void
  2.     CDialog::OnInitDialog(); 
  3.     this->SetWindowTextA(LPCTSTR(CPublic::DevName)); 
  4. //下面的省略 

对右侧的那个弹出窗口创建了一个类,重写了CDialog中的OnInitDialog方法,使用this指针和一个全局变量CPublic::DevName改变了caption

 

2.全局变量的问题。由于两个对话框之间要共享一些变量,怎么办呢?最容易想到的就是使用全局变量进行传递,但是在MFC中怎么定义全局变量呢?查了一些资料,发现了一种方法,定义一个PUBLIC类,专门用来放置全局变量,使用的时候,用作用域来引用,其实这中间的一些问题,我还没解决,而且我觉得用全局变量这个方式不是太好,现在的处理只是权宜之计吧~~

附代码:

 

  
  
  
  
  1. #pragma once 
  2.  
  3. #include "pcap.h" 
  4. // CPublic 用于全局变量/函数的定义 
  5.  
  6. class CPublic : public CWnd 
  7.     DECLARE_DYNAMIC(CPublic) 
  8.  
  9. public
  10.     CPublic(); 
  11.     virtual ~CPublic(); 
  12.     static CString DevName; //保存选中的设备名 
  13. protected
  14.     DECLARE_MESSAGE_MAP() 
  15. }; 

 

3.关于LPTCSTR强制转换的问题。下面这段代码中d->description是char*,DevName为CString,本来想转换成一样的进行比较,不过发现,转换后,那个if语句就始终是假,造成最后报空指针

 

  
  
  
  
  1. for(d = alldevs; d != NULL ;d = d->next) { 
  2.         if(d->description == CPublic::DevName)      //为什么这里加上LPCTSTR进行强制转化DevName后反而会出问题?? 
  3.             break
  4.     } 

不进行强制转换反而没有问题,查了一些资料,还是没明白....待解决中

 

4.关于在其他电脑上运行程序的问题。

因为这毕业设计总要有答辩的一天,也许到时候,没有办法拿自己的电脑去,那么在不同情况下的运行问题,也要解决。我准备了一台纯净的xp虚拟机,专门用来测试。之前的控制台程序,将编译选项改为/MT就可以了。不过MFC似乎不能这样做,只有用静态库编译了。

 

不过这样程序大了好多啊~~

 

5.关于一些函数,在使用setwindowsText之类的函数的时候,我发现一个问题,在VS2008中,代码提示出来的,总是诸如setwindowtextw或者setwindowtexta之类的函数,那么这几者之间有什么区别呢???

我在网上搜到了这么段话

以前在网上看到过一个说法,VC++里面的函数有两套代码,一套是ANSI下的,一套是UNICODE下的,ANSI下的函数以A结尾,UNICODE下的函数以W结尾,同时,去掉结尾字符后的函数名可以同时指代两个函数,编译器解释时具体翻译成哪一个就看你的工程是否定义在UNICODE下了

后来更改字符集试了试,好像确实是这样。

 

由于之前写好的博文丢失的问题...我很郁闷...再写一遍,就不那么认真了...大家见谅.

其实今天有很多问题没有解决的,在赶后面的进度的同时,还是得再把这些东西搞明白

 

毕业设计(简易网络协议分析器)编写历程(三)完

你可能感兴趣的:(C++,职场,mfc,休闲)