對話方塊中對成批控制元件的操作 (轉)

worldblog發表於2007-08-16
對話方塊中對成批控制元件的操作 (轉)[@more@]

在使用VC/MFC時常碰到要對多個同時做同樣的操作的情況,特別是你想使某些控制元件同時禁用或同時隱藏某些控制元件等。這時你一般可以有如下選擇:

1.  你可以給每個控制元件對映控制型別的變數,然後逐個對它們進行操作,這顯然會在對話方塊類例項化時多佔用用來存放成員變數的;

2.  你也可以透過GetDlgItem得到來得到控制元件的窗體指標來逐個操作,而這除了佔用指標記憶體外,遇到太多的控制元件時無疑會使程式碼量增加;

3.  你可採用指標陣列來記錄所有的控制元件,一般先要進行一個初始化動作在動話框開始顯示時記錄下要操作的控制元件,然後去對其操作。這種辦法除了指標空間外,遇到不同型別的要進行太多的型別轉化。

4.  當然,你要像VB那樣使用控制元件陣列的話在VC中也是可以透過對映控制元件的控制型別變數來實現的,但主要是它除了佔用空間外還不太適合於不同型別的控制元件。

這裡介紹的是如果使用對話方塊類自帶的兩個成員函式來實現這種操作,它們是:

l  /editor/_mfc_cwnd.3a3a.getnextdlgtabitem.htm">CWnd::GetNextDlgTabItem得到“下一個”TAB項控制元件

l  得到一組控制元件中的“下一個”

注意::namespace prefix = o ns = "urn:schemas--com::office" />

1.  這裡的“下一個”都是相對的,你可以透過它們的引數讓它變成“上一個”;

2.  在使用前者是要注意要操作控制元件的“TabStop”屬性必須打上鉤或者它要有風格;

3.  使用後一個函式要使要操作的控制元件在一組,方法是在第一個控制元件的Group屬性上打鉤,後面的不打鉤;

4.  當一批控制元件被Enable(false)(即Disable禁用後)下次就使用上述兩個函式就不算在內了,所以要再次使用即恢復它們的話必須另外記下它們的指標;

5.  關於上面的兩個函式的詳細說明請參MSDN。

下面是一個應用它們的例子:

  CWnd * pWndCtrl = GetDlgItem(IDC_STATIC1);

  for(i=0;i < 11 && pWndCtrl != NULL;i++)

  {

    pWndCtrl->EnableWindow(FALSE);

    pWndCtrl = GetNextDlgTabItem(pWndCtrl);

  }

上面的程式碼將同時禁用11個控制元件,將GetNextDlgTabItem換成GetNextDlgGroupItem的話就是對一組控制元件進行操作啦。

當然,因為這兩個函式是CWnd類的成員,對於非對話方塊上的控制元件或者動態建立的控制元件同樣有效。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-962111/,如需轉載,請註明出處,否則將追究法律責任。

相關文章