MFC学习笔记

1.DDX_Control代码作用?

DDX_Control是将控件ID与类的成员变量匹配起来,来完成数据交换,当定义一个控件变量时,MFC会自动为你增加DoDataExchange这个函数是用来完成数据变换,还包括DDX_TEXT

eg:

void CAsTestToolsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_MAINTREE, m_Treemain);
        //IDC_MAINTREE是树控件的ID,m_Treemain是树控件对应类的对象
}

 简单的说,就是把控件变量(m_Treemain)和相关控件(IDC_MAINTREE)关联起来

绑定后就可以使用变量来控制控件!这点C#没有。

2.UpdateData(true) means    Interface -> Member Variables
UpdateData(false) means    Member Variables -> Interface

你在对话框中修改数据的时,成员变量并没有改变
同样,当你修改成员变量时,对话框中的数据是不会改变的
UpdateData()就是来保持同步的! 

就是参数为 true,表示由控件(我们看到的控件)到程序中的控件变量传数据。
                   false,表示由程序中的控件变量向控件传数据

3.srand((unsigned)time(NULL));

  可以认为rand()在每次被调用的时候,它会查看: 1) 如果用户在此之前调用过srand(seed),给seed指定了一个值,那么它会自动调用 srand(seed)一次来初始化它的起始值。 2) 如果用户在此之前没有调用过srand(seed),它会自动调用srand(1)一次。
1) 如果希望rand()在每次程序运行时产生的值都不一样,必须给srand(seed)中的seed一个变值,这个变值必须在每次程序运行时都不一样(比如到目前为止流逝的时间)。 2) 否则,如果给seed指定的是一个定值,那么每次程序运行时rand()产生的值都会一样,虽然这个值会是[seed, RAND_MAX(0x7fff))之间的一个随机取得的值。 3) 如果在调用rand()之前没有调用过srand(seed),效果将和调用了srand(1)再调用rand()一样(1也是一个定值)。

 

stdlib.h头文件中有宏#define RAND_MAX 0x7fff  rand()产生一个0到0x7ffff即0到32767之间的随机数  rand()/(RAND_MAX+1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).最后再加1,就成了一个求1到10之间随机数的式子了.
srand函数是随机数发生器的初始化函数,原型:  void srand(unsigned seed);  它需要提供一个种子,如:  srand(1);  直接使用1来初始化种子。 不过常常使用系统时间来初始化,即使用  time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970  到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型在传给srand函数

,即:  srand((unsigned) time(&t));  还有一个经常用法,不需要定义time_t型t变量,即:  srand((unsigned) time(NULL));  直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。 srand((int)getpid());  使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的  随机输出十个0-100之间的整数 

 1 #include <stdlib.h> 
 2 #include <stdio.h> 
 3 #include <time.h> 
 4 void main( void ) 
 5 { 
 6 int i,k;
 7 srand( (unsigned)time( NULL ) ); 
 8 for( i = 0; i < 10;i++ ) 
 9 { 
10 k=rand()%100; 
11 printf( " k=%d\n", k ); 
12 } 
13 }

 

补充:

  srand()放在哪里并不是问题所在,问题在于两次运行srand((unsigned)time(NULL))之间的时间间隔要足够大,要能让( unsigned )time( NULL )反映出不同的数值,这样种子才不同。 
把srand()放在main里,每次运行程序的时候,从程序结束到重新开始运行,至少都是过了几秒了,这时候种子是不同的,所以随机生成的数不一样。 
把srand()放在其它函数里,计算机代码的运行是很快的,在一秒内调用该函数的次数可能都上几十万次了,( unsigned )time( NULL )可能来不及产生不同的数值,种子是相同的,因此随机生成的数都是一样的。

4.现就这么多!再补充了

 

posted @ 2013-12-31 21:53  丁洋  阅读(194)  评论(0编辑  收藏  举报