2015-06-07 122 views
-1

我使用FPC IDE在Win32中編程我創建Windows對象(如Windows,筆,畫筆等)並且Windows返回Handles。我想通過這些句柄直接訪問對象的數據。 這可能嗎?如果是,如何?通過Windows處理訪問Windows數據

+0

'HANDLE's基本上是指針,所以內存地址。如果你知道這樣一個「對象」的內部表示,當然這是可能的,但我沒有看到任何理由這樣做,因爲所有的操作都應該由WinAPI執行(以'HANDLE'作爲參數)。 – CristiFati

+2

@Cristi:'HANDLE'不是指針。它們是內核控制容器的索引。即使它們是指針,並且您確實知道內部表示,您也無法訪問受保護的內核內存。另一方面,HWND則是模糊的指向內核控制結構的指針,它們只讀映射到用戶模式內存中。 – IInspectable

+1

https://msdn.microsoft.com/en-us/library/windows/desktop/dd144904%28v=vs.85%29.aspx –

回答

1

我想通過這些句柄直接訪問對象的數據。可能嗎?

不。這些手柄是不透明的。使用提供的API與這些對象進行交互。

+0

謝謝,我明白了。所以每次我想改變選定的筆(DC)的顏色,我必須創建一個新的? –

+0

[this](https://msdn.microsoft.com/en-us/library/windows/desktop/dd162970(v = vs.85).aspx)有幫助嗎? – CristiFati

1

正確訪問圖形對象(如筆或筆刷)的數據的方法是使用GetObject()。但是如果你想修改這樣一個對象,你需要使用適當的API(CreatePenIndirect()等)創建一個新的對象,除非有專門用於操作現有對象的API(例如當選擇股票DC_PEN時爲SetDCPenColor()變成HDC)。

+0

'SetDCPenColor'並不真正處理GDI對象。它僅存儲一個'COLORREF'值,用於繪製,當DC_PEN被選入設備上下文時。 – IInspectable

+0

謝謝你......所以每次我想使用不同的風格,顏色,筆,刷子,地區,我不得不創造一個新的? –

+0

@TạĐặngVĩnhPhúc:是的。您可以根據需要爲每個圖形創建它們,也可以事先創建它們並將其重複用於多個圖形。 –