共用方式為


SetWindowLongW 函式 (winuser.h)

變更指定視窗的屬性。 函式也會將位於指定位移的32位 (long) 值設定為額外的視窗記憶體。

Note SetWindowLongPtr 函式已 取代此函式。 若要撰寫與 32 位和 64 位版本的 Windows 相容的程式代碼,請使用 SetWindowLongPtr 函式。
 

語法

LONG SetWindowLongW(
  [in] HWND hWnd,
  [in] int  nIndex,
  [in] LONG dwNewLong
);

參數

[in] hWnd

類型:HWND

視窗的句柄,而且間接地是窗口所屬的類別。

[in] nIndex

類型:int

要設定之值的以零起始位移。 有效值介於零到額外視窗記憶體的位元元組數目之間,減去整數的大小。 若要設定任何其他值,請指定下列其中一個值。

價值 意義
GWL_EXSTYLE
-20
設定新的 擴充視窗樣式
GWL_HINSTANCE
-6
設定新的應用程式實例句柄。
GWL_ID
-12
設定子視窗的新識別碼。 視窗不可以是最上層視窗。
GWL_STYLE
-16
設定新的 視窗樣式
GWL_USERDATA
-21
設定與視窗相關聯的用戶數據。 此資料供建立視窗的應用程式使用。 其值一開始為零。
GWL_WNDPROC
-4
設定視窗程式的新位址。

如果視窗不屬於與呼叫線程相同的進程,則無法變更這個屬性。

 

hWnd 參數識別對話框時,也可以使用下列值。

價值 意義
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
設定對話框程式的新位址。
DWL_MSGRESULT
0
設定對話框程序中處理之訊息的傳回值。
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC)
設定應用程式私用的新額外資訊,例如句柄或指標。

[in] dwNewLong

類型:LONG

取代值。

傳回值

類型:LONG

如果函式成功,傳回值就是指定之 32 位整數的先前值。

如果函式失敗,傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

如果指定之 32 位整數的上一個值為零,且函式成功,則傳回值為零,但函式不會清除最後一個錯誤資訊。 這會使判斷成功或失敗變得困難。 若要解決此問題,您應該先呼叫 SetLastError 0,再呼叫 setWindowLong ,以清除最後一個錯誤資訊。 然後,函式失敗會以零的傳回值和 GetLastError 非零的結果表示。

言論

某些視窗數據會快取,因此您在呼叫 SetWindowPos 函式之前,SetWindowLong 所做的變更才會生效。 具體而言,如果您變更任何框架樣式,則必須使用 SWP_FRAMECHANGED 旗標呼叫 SetWindowPos,快取才能正確更新。

如果您使用 SetWindowLong 搭配 GWL_WNDPROC 索引來取代視窗程式,則視窗程式必須符合 WindowProc 回呼函式描述中指定的指導方針。

如果您使用 SetWindowLong 搭配 DWL_MSGRESULT 索引來設定對話框程式所處理之訊息的傳 回值,您應該在之後直接傳回 true。 否則,如果您呼叫任何導致對話框程式收到視窗訊息的函式,巢狀視窗訊息可能會覆寫您使用 DWL_MSGRESULT所設定的傳回值。

使用 GWL_WNDPROC 索引呼叫 SetWindowLong,會建立用來建立視窗之視窗類別的子類別。 應用程式可以子類別系統類別,但不應該將另一個進程所建立的視窗類別子類別子類別。 SetWindowLong 函式會藉由變更與特定視窗類別相關聯的視窗程式來建立視窗子類別,導致系統呼叫新的視窗程式,而不是先前的程式。 應用程式必須藉由呼叫 CallWindowProc,將新視窗程式未處理的任何訊息傳遞至上一個視窗程式。 這可讓應用程式建立視窗程序的鏈結。

在搭配 RegisterClassEx 函式使用的 WNDCLASSEX 結構成員中指定非零值,以保留額外的視窗記憶體。

您不得使用 GWL_HWNDPARENT 索引呼叫 SetWindowLong,以變更子視窗的父代。 請改用 setParent 函式

如果視窗類別樣式為 CS_CLASSDCCS_OWNDC,請勿將擴充視窗樣式設定為 WS_EX_COMPOSITEDWS_EX_LAYERED

呼叫 SetWindowLong 來設定進度列上的樣式將會重設其位置。

例子

如需範例,請參閱 子類別化視窗

注意

winuser.h 標頭會將 SetWindowLong 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winuser.h (包括 Windows.h)
連結庫 User32.lib
DLL User32.dll
API 集 ext-ms-win-ntuser-windowclass-l1-1-0 (在 Windows 8 中引進)

另請參閱

CallWindowProc

概念

GetWindowLong

參考

RegisterClassEx

SetParent

SetWindowLongPtr

WNDCLASSEX

視窗類別

WindowProc