使用者物件
使用者介面物件只支援每個物件的一個控制碼。 進程無法繼承或複製使用者物件的控制碼。 某個會話中的進程無法參考另一個會話中的使用者控制碼。
每個會話的理論限制為 65,536 個使用者控制碼。 不過,每個會話可以開啟的使用者控制碼數目上限通常較低,因為它會受到可用記憶體的影響。 使用者控制碼也有預設的個別進程限制。 若要變更此限制,請設定下列登錄值:
\ HKEY_LOCAL_MACHINE軟體\微軟\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota
這個值可以設定為介於 200 到 18,000 之間的數位。
使用者物件的控制碼
使用者物件的控制碼對所有進程都是公用的。 也就是說,只要進程具有物件的安全性存取權,任何進程都可以使用使用者物件控制碼。
在下圖中,應用程式會建立視窗物件。 CreateWindow函式會建立視窗物件,並傳回物件控制碼。
建立視窗物件之後,應用程式可以使用視窗控制碼來顯示或變更視窗。 控制碼會維持有效狀態,直到視窗物件終結為止。
在下一個圖例中,應用程式會終結視窗物件。 DestroyWindow函式會從記憶體中移除視窗物件,使視窗控制碼失效。
管理使用者物件
下表列出使用者物件,以及每個物件的建立者和終端子函式。 建立者函式會建立物件和物件控制碼,或直接傳回現有的物件控制碼。 終端子函式會從記憶體中移除 物件,使物件控制碼失效。
使用者物件 | Creator 函式 | Destroyer 函式 |
---|---|---|
快速鍵資料表 | CreateAcceleratorTable | DestroyAcceleratorTable |
插入點 | CreateCaret | DestroyCaret |
資料指標 | CreateCursor、 LoadCursor、 LoadImage | DestroyCursor |
DDE 交談 | DdeConnect、 DdeConnectList | DdeDisconnect、 DdeDisconnectList |
勾點 | SetWindowsHookEx | UnhookWindowsHookEx |
圖示 | CreateIconIndirect、 LoadIcon、 LoadImage | DestroyIcon |
功能表 | CreateMenu、 CreatePopupMenu、 LoadMenu、 LoadMenuIndirect | DestroyMenu |
時間範圍 | CreateWindow、 CreateWindowEx、 CreateDialogParam、 CreateDialogIndirectParam、 CreateMDIWindow | DestroyWindow |
視窗位置 | BeginDeferWindowPos | EndDeferWindowPos |