MFC批量啟用/禁用控件


本文來自: http://blog.csdn.net/qj840828/article/details/2874470

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

  1. 你可以給每個控件映射控制類型的變量,然后逐個對它們進行操作,這顯然會在對話框類實例化時多占用用來存放成員變量的內存;
  2. 你也可以通過GetDlgItem函數得到來得到控件的窗體指針來逐個操作,而這除了占用指針內存外,遇到太多的控件時無疑會使代碼量增加;
  3. 你可采用指針數組來記錄所有的控件,一般先要進行一個初始化動作在動話框開始顯示時記錄下要操作的控件,然后去對其操作。這種辦法除了指針空間外,遇到不同類型的要進行太多的類型轉化。
  4. 當然,你要像vb那樣使用控件數組的話在vc中也是可以通過映射控件的控制類型變量來實現的,但主要是它除了占用空間外還不太適合於不同類型的控件。

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

 

注意:

  1. 這里的“下一個”都是相對的,你可以通過它們的參數讓它變成“上一個”;
  2. 在使用前者是要注意要操作控件的tabstop”屬性必須打上鈎或者它要有ws_tabstop風格;
  3. 使用后一個函數要使要操作的控件在一組,方法是在第一個控件的group屬性上打鈎,后面的不打鈎;
  4. 當一批控件被enable(false)(即disable禁用后)下次就使用上述兩個函數就不算在內了,所以要再次使用即恢復它們的話必須另外記下它們的指針

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

CWnd * pwndctrl = GetDlgItem(idc_static1);
for(i=0;i < 11 && pwndctrl != null;i++)
{
      pwndctrl->EnableWindow(FALSE);
      pwndctrl = GetNextDlgTabItem(pwndctrl);
}

上面的代碼將同時禁用11個控件,將getnextdlgtabitem換成getnextdlggroupitem的話就是對一組控件進行操作啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM