SetWindowLongPtrA 函式 (winuser.h)

變更指定視窗的屬性。 函式也會在額外視窗記憶體中的指定位移設定值。

注意 若要撰寫與 32 位和 64 位版本的 Windows 相容的程式碼,請使用 SetWindowLongPtr。 編譯 32 位 Windows 時, SetWindowLongPtr 會定義為 SetWindowLong 函式的呼叫。

 

語法

LONG_PTR SetWindowLongPtrA(
  [in] HWND     hWnd,
  [in] int      nIndex,
  [in] LONG_PTR dwNewLong
);

參數

[in] hWnd

類型: HWND

視窗的控制碼,以及間接屬於視窗所屬的類別。 如果擁有hWnd參數所指定視窗的進程比呼叫執行緒所在的進程更高,則SetWindowLongPtr函式會失敗。

Windows XP/2000:如果hWnd參數指定的視窗不屬於與呼叫執行緒相同的進程,SetWindowLongPtr函式就會失敗。

[in] nIndex

類型: int

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

意義
GWL_EXSTYLE
-20
設定新的 擴充視窗樣式
GWLP_HINSTANCE
-6
設定新的應用程式實例控制碼。
GWLP_ID
-12
設定子視窗的新識別碼。 視窗不可以是最上層視窗。
GWL_STYLE
-16
設定新的 視窗樣式
GWLP_USERDATA
-21
設定與視窗相關聯的使用者資料。 此資料適用于建立視窗的應用程式。 其值一開始為零。
GWLP_WNDPROC
-4
設定視窗程式的新位址。
 

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

意義
DWLP_DLGPROC
DWLP_MSGRESULT + sizeof (LRESULT)
設定對話方塊程式的新指標。
DWLP_MSGRESULT
0
設定對話方塊程式中處理之訊息的傳回值。
DWLP_USER
DWLP_DLGPROC + sizeof (DLGPROC)
設定應用程式私用的新額外資訊,例如控制碼或指標。

[in] dwNewLong

類型: LONG_PTR

替代值。

傳回值

類型: LONG_PTR

如果函式成功,傳回值就是指定位移的先前值。

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

如果前一個值為零且函式成功,則傳回值為零,但函式不會清除最後的錯誤資訊。 若要判斷成功或失敗,請使用 0 呼叫 SetLastError 來清除最後的錯誤資訊,然後呼叫 SetWindowLongPtr。 函式失敗會以零的傳回值和非零的 GetLastError 結果表示。

備註

系統會快取某些視窗資料,因此使用 SetWindowLongPtr 所做的變更在呼叫 SetWindowPos 函式之前不會生效。

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

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

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

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

請勿使用GWLP_HWNDPARENT索引呼叫SetWindowLongPtr,以變更子視窗的父代。 請改用 SetParent 函式。

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

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

注意

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

規格需求

   
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 winuser.h (包含 Windows.h)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-windowclass-l1-1-0 (在 Windows 8)

另請參閱

CallWindowProc

概念

GetWindowLongPtr

參考

RegisterClassEx

SetParent

WNDCLASSEX

視窗類別

WindowProc