使用CLabel類的不解事項

2021-06-03 05:28:23 字數 1514 閱讀 3916

因為是「一組按鈕」(不是乙個),程式應該用迴圈的方式來遍歷「每乙個按鈕」,而不是直接去直觀的「按鈕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 ...