簡介
函式功能:該函式替換額外的類存儲空間中指定偏移量處的32位長整型值,或替換指定視窗所屬類的WNDCLASSEX結構(應該是替換這個結構體中值,沒有替換結構體)。
函式原型:DWORD SetClassLong(HWND hWnd,int nlndex,LONG dwNewLong)
例如,下面的代碼可以創建新的畫刷,把句柄存入到視窗類中然後刪除舊的畫刷:
DeleteObject ((HBRUSH)
SetClassLong (IntPtr hWnd,int nlndex,long dwNewLong)
GetStockObject (WHITE_BRUSH))) ; //參考Windows程式設計第五版P361
參數
hWnd:視窗句柄及間接給出的視窗所屬的類。
nlndex:指定將被替換的32位值。在額外類存儲空間中設定32位值,應指定一個大於或等於0的偏移量。
有效值的範圍從0到額外類的存儲空間的位元組數一4;
例如,若指定了12個位元組或多於12個位元組的額外類存儲空間,則索引值為8時,對應的是第三個32位整數值。
如果要設定WNDCLASSEX結構中的任何值,需要指定下面索引之一:
GCL_CBCLSEXTRA:設定與類相關的尺寸的位元組大小。設定該值不改變己分配的額外位元組數。
GCL_CBWNDEXTRA:設定與類中的每一個視窗相關的尺寸的位元組大小。設定該值不改變已分配額外位元組數。查看如何進入該記憶體,參看SetWindowLOng。
GCL_HBRBACKGROUND:替換與類有關的背景刷子的句柄。
GCL_HCURSOR:替換與類有關的游標的句柄。GCL_HICON:替換與類有關的圖示的句柄。
GCL_HMODULE:替換註冊類的模組的句柄。GCL_STYLE:替換視窗類的風格位。
GCL_MENUNAME :替換選單名字元串的地址。該字元串標識與類有關的選單資源。
GCL_WNDPROC :替換與視窗類有關的視窗過程的地址。
dwNewLong:指定的替換值。
返回值:
返回值的類型: DWORD
如果函式成功,返回值是原來類結構中32位整數;如果沒有初始化,返回值為0。如果函式失敗,返回值也為0。若想獲得更多錯誤信息,請調用GetLastError函式。
備註;如果使用SetClassLong函式和GCL_WNDPROC索引值來替換視窗程式,新的視窗程式必須與WindowProc回調函式中所規定的規則一致。
以帶有GCL_WNDPROC索引值的SetClassLong函式修改的一個視窗類的的子類將會影響所有隨後以該類創建的視窗。應用程式可以創建一個系統類的子類,但是不能創建由其他進程創建的類的子類。
通過使用RegisterClassEx函式將WNDCLASSEX結構中的cbWndExtra單元指定為一個非零值來保留額外的的類存儲空間。
使用SetClassLong函式要小心。例如,可以通過使用SetClassLong來改變類的背景顏色,但是這種改變不會馬上生效,直到屬於該類的窗體下次重繪,除非使用UpdateWindow()強迫窗體更新。
Windows CE:nlndex參數是一個位元組偏移量但必須是4的倍數。Unaligned不支持。
不支持在nlndex參數中的標準的CGL_★值,只有一個例外,如果目標設各支持滑鼠,則可以在nlndex參數中指定CGL_HCURSOR。
注意支持滑鼠的WindowsCE版本包含Iconcurs和Mcursor組件而不是lcon和Cursor組件。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本;頭檔案:winuser.h;庫檔案:user32.lib;Unicode:在Windows NT 上實現為Unicode和ANSI兩種版本。