因為是「一組按鈕」(不是乙個),程式應該用迴圈的方式來遍歷「每乙個按鈕」,而不是直接去直觀的「按鈕2設定顏色、按鈕2設定顏色,。。。。按鈕n設定顏色」。第一次我選用了迴圈遍歷控制項id下標方式,以下程式是選擇了兩個靜態控制項做例子:
使用vc建立乙個基於對話方塊的程式,上面新增兩個靜態文字框(idc_static01、idc_static02)和乙個按鈕,兩個靜態文字框分別關聯clabel類:
在標頭檔案中:
clabel m1;
clabel m2;
在實現cpp檔案初始化函式oninitdialog中:
m1.subclassdlgitem(idc_static01,this);
m2.subclassdlgitem(idc_static02,this);
在cpp實現檔案中,寫乙個讓它閃爍的函式:
//
// 奇數時為紅色,偶數時為綠色
//void ctest2dlg::setcolors(int x)
else
}}
void ctest2dlg::onok()
也可以使用settimer呼叫,也是正常閃爍的:
void ctest2dlg::onok()
void ctest2dlg::ontimer(uint nidevent)
void ctest2dlg::onok()
uint mycontrollingfunction( lpvoid pparam )
return 1l;
}
報錯:mfc42d!cframewnd::'rtti base class descriptor at .........,分別將執行緒函式設定為靜態類成員函式和友元函式,問題依舊,百思不得其解!
好像是
clabel *p = ((clabel *)getdlgitem(i));
轉換型別時失敗,但是為何在按鈕事件(或者時鐘觸發事件)中直接呼叫,又不失敗呢?
最後的解決辦法:不使用控制項id下標迴圈:
定義時:
clabel m[2];
關聯時:
for (int i=0; i<2; i++)
設定閃爍顏色時:
void ctest2dlg::setcolors(int x)
else
}}
因為起到了同樣的遍歷靜態控制項的效果,只好暫時到此為止。
觀察clabel的原始碼,沒看出什麼問題,並且自己也嘗試寫過乙個ccolorstatic類(只是實現設定背景顏色),在用第一方式呼叫(執行緒函式迴圈id下標),是正常的!更加百思不得其解,先到此。
Python 類的使用注意事項
from random import randint class die def init self,sides 6 self.sides sides def roll die self number randint 1,self.sides print str self.sides die is ...
包裝類及使用時的注意事項
基本資料型別 列舉 enum int char boolean number 包裝類把基本型別的資料轉換為物件 把基本資料型別包裝起來就會把資料大開頭變為大寫,變為。類 包裝類 integer,double,float,byte,boolean,character,long,short 型別轉換 基...
c 抽象類的使用及注意事項
抽象成員成員是指設計成為被覆寫的函式成員。抽象成員具有以下特徵 1.必須是乙個函式成員。也就是說欄位和常量不能為抽象成員。2.必須用abstract修飾符標記。3.不能有實現 塊。抽象成員的 用分號表示 abstract public void print string s 方法 abstract ...