GetWindowLong SetWindowLong 詳解

GetWindowLong

  函數功能:該函數獲得有關指定窗口的信息,函數也獲得在額外窗口內存中指定偏移位地址的32位度整型值。
  函數原型:LONG GetWindowLong(HWND hWnd,int nlndex);
  參數:
  hWnd:窗口句柄及間接給出的窗口所屬的窗口類。
  nlndex:指定要檢索的基於0的的偏移量。有效值的範圍從0到窗口額外內存空間的字節數,減去4。例如,若指定了12位或多於12位的窗體類的額外存儲空間,則應設爲第三個32位整數的索引位8(12-4=8)。要獲得任意其他值,指定下列值之一:
  GWL_EXSTYLE;獲得擴展窗口風格。
  GWL_STYLE:獲得窗口風格。
  GWL_WNDPROC:獲得窗口過程的地址,或代表窗口過程的地址的句柄。必須使用GWL_WNDPROC函數調用窗口過程。
  GWL_HINSTANCE:獲得應用事例的句柄。
  GWL_HWNDPAAENT:如果父窗口存在,獲得父窗口句柄。
  GWL_ID:獲得窗口標識。
  GWL_USERDATA:獲得與窗口有關的32位值。每一個窗口均有一個與這個窗口相關的給用戶使用的32位的數據。具體用途自定義。
  在hWnd參數標識了一個對話框時也可用下列值:
  DWL_DLGPROC:獲得對話框過程的地址,或一個代表對話框過程的地址的句柄。必須使用函數CallWindowProc來調用對話框過程。
  DWL_MSGRESULT:獲得在對話框過程中一個消息處理的返回值。
  DWL_USER:獲得應用程序私有的額外信息,例如一個句柄或指針。
  返回值:如果函數成功,返回值是所需的32位值;如果函數失敗,返回值是0。若想獲得更多錯誤信息請調用 GetLastError函數。
  備註:通過使用函數RegisterClassEx將結構WNDCLASSEX中的cbWndExtra單元指定爲一個非0值來保留額外類的存儲空間。
  Windows CE:nlndex參數指定的字節偏移量必須爲 4的倍數。不支持 unaligmned access。
  Windows CE:不支持在參數nlndex中設定的GWL_HINSTANCE和GWL_HWNDPARENT。
  Windows CE1.0也不支持在 nlndex參數中的 DWL_DLGPROC和 GWL_USERDATA。
 

 

 

SetWindowLong

  函數功能:該函數改變指定窗口的屬性函數也將指定的一個32位值設置在窗口的額外存儲空間的指定偏移位置。
  函數原型:LONG SetWindowLong(HWND hWnd,int nlndex,LONG dwNewLong);
  參數:
  hWnd:窗口句柄及間接給出的窗口所屬的類。
  nlndex:指定將設定的大於等於0的偏移值。有效值範圍從0到額外類的存儲空間的字節數-4:例如若指定了12位或多於12位的額外類存儲空間,則應設爲第三個32位整數的索引位8。要設置其他任何值,可以指定下面值之一:
  GWL_EXSTYLE:設定一個新的擴展風格。GWL_STYLE:設定一個新的窗口風格。
  GWL_WNDPROC:爲窗口過程設定一個新的地址。GWL_ID:設置一個新的窗口標識符。
  GWL_HINSTANCE:設置一個新的應用程序事例句柄。
  GWL_USERDATA:設置與窗口有關的32位值。每一個窗口均有一個由創建該窗口的應用程序使用的32位值。
  當hWnd參數標識了一個對話框時,也可使用下列值:
  DWL_DLGPROC:設置對話框過程的新地址。
  DWL_MSGRESULT:設置在對話框過程中處理的消息的返回值。
  DWL_USER:設置的應用程序私有的新的額外信息,例如一個句柄或指針。
  dwNewLong:指定的替換值。
  返回值:如果函數成功,返回值是指定的32位整數的原來的值。如果函數失敗,返回值爲0。若想獲得更多錯誤信息,請調用GetLastError函數。
  如果指定32位整數的原來的值爲0,並且函數成功,則返回值爲0,但是函數並不清除最後的錯誤信息,這就很難判斷函數是否成功。這時,就應在調用SetWindowLong之前調用callingSetLastError(0)函數來清除最後的錯誤信息。這樣,如果函數失敗就會返回0,並且GetLastError。也返回一個非零值。
  備註;如果由hWnd參數指定的窗口與調用線程不屬於同一進程,將導致SetWindowLong函數失敗。
  指定的窗口數據是在緩存中保存的,因此在調用SetWindowLong之後再調用SetWindowPos函數才能使SetWindowLong函數所作的改變生效。
  如果使用帶GWL_WNDPROC索引值的SetWindowLong函數替換窗口過程,則該窗口過程必須與WindowProccallback函數說明部分指定的指導行一致。
  如果使用帶DWL_MSGRESULT索引值的SetWindowLong函數來設置由一個對話框過程處理的消息的返回值,應在此後立即返回TRUE。否則,如果又調用了其他函數而使對話框過程接收到一個窗口消息,則嵌套的窗口消息可能改寫使用DWL_MSGRESULT設定的返回值。
  可以使用帶GWL_WNDPROC索引值的SetWindowLong函數創建一個窗口類的子類,該窗口類是用於創建該窗口的關。一個應用程序可以一個系統美爲於類,但是不能以一個其他進程產生的窗口類爲子類,SetwindowLong函數通過改變與一個特殊的窗口類相聯繫的窗口過程來創建窗口子類,從而使系統調用新的窗口過程而不是以前定義的窗口過程。應用程序必須通過調用CallWindowProc函數向前窗口傳遞未被新窗口處理的消息,這樣作允許應用程序創建一個窗口過程鏈。
  通過使用函數RegisterClassEx將結構WNDCLASSEX中的cbWndExtra單元指定爲一個非0值來保留新外窗口內存。
  不能通過調用帶GWL_HWNDPARENT索引值的SetWindowLong的函數來改變子窗口的父窗口,應使用SetParent函數。
  Windows CE:nlndex參數必須是4個字節的倍數不支持unaligned access。
  不支持下列nlndex參數值:。
  GWL_HINSTANCE;GWL_HWNDPARENTGWL;GWL_USERDATA
  Windows CE 2.0版支持在nlndex參數中的DWL_DLGPROC值,但是WindowsCE1.0不支持。
  速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:頭文件:winuser.h;庫文件:user32.lib;Unicode:在Windows NT上實現爲Unicode和ANSI兩種版本。
  函數功能:該函數刪除一個窗口類,清空該類所需的內存。
  函數原型:BOOL UnRegisterClass(LPCTSTR IpClassName; HINSTANCE hlnstance);
  參數:
  IpClassName:指向一個空結束字符串的指針,或是一個整型原子。如果IpClassName是一個字符串,則它指定了窗口類的類名。這個類名必須由此前調用RegisterClassEx函數來註冊。系統類,如對話框控制,必須被註冊。
  如果這個參數是一個整型原子,它必須是由此前調用GlobalAdd原子函數創建的全局原子。這個16位整型數小於OxCOOO,必須是lpszClass的低16位,其高位宇必須爲0。
  hlnstance:創建類的模塊的事例句柄。
  返回值:如果函數成功,返回值爲非零;如果未發現類或由此類創建的窗口仍然存在,則返回值爲0。
  若想獲得更多錯誤信息,請調用GetLastError函數。
  備註:在調用這個函數之前,應用程序必須銷燬由指定類創建的所有窗口。
  應用程序註冊的所有窗口類在應用程序中止後都爲未註冊的類。
  Windows 95:所有由OLL註冊的窗口類在DLL卸載後均未註冊的類。
  windows NT:所有由DLL註冊的類在DLL卸載後仍爲已註冊的類。
  速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;頭文件:winuser.h;庫文件:user32.lib;Unicode:在Windows NT上實現爲Uhicode和ANSI兩種版本。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章