zoukankan      html  css  js  c++  java
  • 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
    ", k ); 
    12 } 
    13 }

    补充:

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

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

  • 相关阅读:
    Lucene 基础理论
    .NET Micro Framework V4.2 QFE2新版本简介
    FlashPaper
    在django中实现QQ登录
    基于lucene的搜索服务器
    ASP.NET MVC的Razor引擎:RazorViewEngine
    .Net Micro Framework
    关于基于DDD+Event Sourcing设计的模型如何处理模型重构的问题的思考
    泛型
    Log4j源码分析及配置拓展
  • 原文地址:https://www.cnblogs.com/my-life/p/3500115.html
Copyright © 2011-2022 走看看