利用類的非static成員函式作視窗的處理函式

2021-04-13 10:55:23 字數 726 閱讀 9823

實現方法:   

用類的乙個static函式作真正的處理函式,在該函式中呼叫另乙個非static的函式進行處理。

困難:static函式不能直接呼叫非static的函式。

原因:static 修飾的函式相當於全域性函式,因此在函式執行中this指標無效,也就是說該函式的執行沒有針對某個具體的類例項,所以也就不能用某個類中的非static 成員變數。

技巧:在建立好視窗後立即利用setwindowlong函式將類例項的指標傳給視窗。

在static的處理函式中利用getwindowlong函式取出該指標。

然後就可以通過該指標呼叫非static的處理函式了。

例子:如果你是想用static修飾的函式(如winproc)作為視窗的處理函式的話,有解決方法:

class

sarea 

hwnd sarea::createsarea(lpctstr wndname, dword dwstyle, 

intx, 

inty, 

intw,

inth,hwnd hparent)

lresult callback sarea::sareaproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

void

sarea::sproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

static成員和非static成員

1.靜態成員 1 所有的static方法不允許呼叫非static定義的屬性或方法,因為靜態函式成員屬於類的成員,例項成員變數是屬於某個物件的,而靜態方法在執行時,並不一定存在物件,但是靜態方法可以使用靜態變數 2 描述共享屬性,只需在屬性前新增static關鍵字即可,建立乙個類的多個例項,其stat...

C 之static類成員,static類成員函式

0.static修飾類中成員,表示類的共享資料 1.static類成員 在c primer裡面說過,static類成員不像普通的類資料成員,static類資料成員獨立於一切類物件處在。static類資料成員是與類關聯的,但不與該類定義的物件有任何關係。這句話什麼意思?就是static不會想普通類資料...

static資料成員 static成員函式

類的static資料成員的引入 不同物件之間共享訪問,本質上是對該型別所有物件,只維持乙份拷貝。與全域性變數相比,優勢 1.靜態資料成員仍然是在類域名字空間,沒用進入程式的全域性名字空間,因此不存在與程式中其他全域性名字衝突的可能。2.可以實現資訊隱藏,靜態資料成員可以是private成員,全域性變...