SetWindowLongA 函式 (winuser.h)
變更指定視窗的屬性。 函式也會將指定位移的32位 (長) 值設定為額外的視窗記憶體。
語法
LONG SetWindowLongA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG dwNewLong
);
參數
[in] hWnd
類型: HWND
視窗的句柄,以及間接屬於窗口所屬的類別。
[in] nIndex
類型: int
要設定之值的以零起始位移。 有效值的範圍是零到額外視窗記憶體的位元元組數目,減去整數的大小。 若要設定任何其他值,請指定下列其中一個值。
值 | 意義 |
---|---|
|
設定新的 擴充窗口樣式。 |
|
設定新的應用程式實例句柄。 |
|
設定子視窗的新識別碼。 視窗不可以是最上層視窗。 |
|
設定新的 視窗樣式。 |
|
設定與視窗相關聯的用戶數據。 此資料適用於建立視窗的應用程式。 其值一開始為零。 |
|
設定視窗程式的新位址。
如果視窗不屬於與呼叫線程相同的進程,則無法變更此屬性。 |
當 hWnd 參數識別對話框時,也可以使用下列值。
值 | 意義 |
---|---|
|
設定對話框程式的新位址。 |
|
設定對話框程序中處理之訊息的傳回值。 |
|
設定應用程式私用的新額外資訊,例如句柄或指標。 |
[in] dwNewLong
類型: LONG
替代值。
傳回值
類型: LONG
如果函式成功,則傳回值是指定之 32 位整數的先前值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
如果指定的 32 位整數先前值為零,且函式成功,則傳回值為零,但函式不會清除最後的錯誤資訊。 這會使判斷成功或失敗變得困難。 若要解決此問題,您應該先以 0 呼叫 SetLastError ,再呼叫 SetWindowLong 來清除最後的錯誤資訊。 然後,函式失敗會以零的傳回值和非零的 GetLastError 結果表示。
備註
系統會快取某些視窗數據,因此使用 SetWindowLong 所做的變更在呼叫 SetWindowPos 函式之前將不會生效。 具體而言,如果您變更任何框架樣式,則必須使用SWP_FRAMECHANGED旗標呼叫 SetWindowPos,快取才能正確更新。
如果您使用 SetWindowLong 搭配 GWL_WNDPROC 索引來取代視窗程式,則視窗程式必須符合 WindowProc 回呼函式描述中指定的指導方針。
如果您使用 SetWindowLong 搭配 DWL_MSGRESULT 索引來設定對話框程式所處理之訊息的傳回值,則應該在之後直接傳回 TRUE 。 否則,如果您呼叫任何會導致對話框程式收到視窗訊息的函式,巢狀視窗訊息可能會覆寫您使用 DWL_MSGRESULT 設定的傳回值。
使用GWL_WNDPROC索引呼叫 SetWindowLong 會建立用來建立視窗之視窗類別的子類別。 應用程式可以將系統類別子類別化,但不應該將另一個進程所建立的視窗類別子類別子類別。 SetWindowLong 函式會藉由變更與特定視窗類別相關聯的視窗程式來建立視窗子類別,導致系統呼叫新的視窗程式,而不是上一個視窗程式。 應用程式必須呼叫 CallWindowProc,將新視窗程式未處理的任何訊息傳遞至先前的視窗程式。 這可讓應用程式建立視窗程序的鏈結。
在搭配 RegisterClassEx 函式使用的 WNDCLASSEX 結構之 cbWndExtra 成員中指定非零值,以保留額外的視窗記憶體。
您不得使用GWL_HWNDPARENT索引呼叫 SetWindowLong,以變更子視窗的父代。 請改用 SetParent 函式。
如果視窗的類別樣式為 CS_CLASSDC 或 CS_OWNDC,請勿將擴充視窗樣式設定 為 WS_EX_COMPOSITED 或 WS_EX_LAYERED。
呼叫 SetWindowLong 以設定進度列上的樣式將會重設其位置。
範例
如需範例,請參閱 子類別化視窗。
注意
winuser.h 標頭會將 SetWindowLong 定義為別名,根據 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) |
另請參閱
概念
參考