MFC學習筆記

1.DDX_Control代碼做用?web

DDX_Control是將控件ID與類的成員變量匹配起來,來完成數據交換,當定義一個控件變量時,MFC會自動爲你增長DoDataExchange這個函數是用來完成數據變換,還包括DDX_TEXT函數

eg:spa

void CAsTestToolsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_MAINTREE, m_Treemain);
        //IDC_MAINTREE是樹控件的ID,m_Treemain是樹控件對應類的對象
}
指針

 簡單的說,就是把控件變量(m_Treemain)和相關控件(IDC_MAINTREE)關聯起來code

綁定後就能夠使用變量來控制控件!這點C#沒有。orm

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

你在對話框中修改數據的時,成員變量並無改變
一樣,當你修改爲員變量時,對話框中的數據是不會改變的
UpdateData()就是來保持同步的! 
對象

就是參數爲 true,表示由控件(咱們看到的控件)到程序中的控件變量傳數據。
                   false,表示由程序中的控件變量向控件傳數據
blog

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

  能夠認爲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也是一個定值)。get

 

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.現就這麼多!再補充了

相關文章
相關標籤/搜索