2009-12-15 38 views
1

我需要在Compact Framework應用程序中繪製文本框,但直接使用Graphics對象。在Compact Framework上使用GDI繪圖控件

我發現了Control.DrawToBitmap方法,可以用它來繪製GDI,但它在Compact Framework上不可用。

任何提示?

+0

在另一個應用程序中繪製文本框?否則直接繪製圖形不是一個選項? – RvdK 2009-12-15 10:15:43

+0

我沒有使用標準的WinForms控件,而是使用其他基於GDI的控件庫。我需要從頭開始創建自己的TextBox(時間約束不允許我這樣做),或者能夠使用GDI繪製WinForms TextBox。 我還沒有找到如何直接在CF上繪製圖形。 – penyaskito 2009-12-15 10:33:29

回答

0

那麼通常你只是繼承自:Control,重寫OnPaint並使用參數提供的圖形對象。你嘗試過這個嗎?

+0

有了這個,我可以繪製文本,線條,多邊形,位圖等,但是我怎樣才能從沒有任何控制的文本框中獲取「圖像」? – penyaskito 2009-12-15 10:42:20

+0

呃?你想獲得由控件繪製的圖像?你不能得到這個,除非你自己實現控制並通過屬性公開它。您可以通過在由Graphics.FromImage()創建的圖形對象上繪製控件,然後在通過在事件參數的「主」圖形對象上使用Graphics.DrawImage最終繪製控件之前通過屬性公開該圖像。您將不得不以這種方式重新實施每一個控制,儘管這樣做會很費力。 – Quibblesome 2009-12-15 13:23:52

1

Control.DrawToBitmap()是通過向控件發送WM_PRINT來實現的,讓它在內存設備上下文中繪製自己。如果您使用的是非標準控件,那麼程序員沒有實現此消息的可能性非常大。我不認爲它是由標準的Windows Mobile控件實現的。

然後,您唯一的方法就是將像素複製到屏幕上。 Graphics.CopyFromScreen()是一個不行,你必須P/Invoke的BitBlt()API函數。可能有用的示例代碼可在this thread.和pinvoke.net

+0

我做了BitBit p/Invoke,但得到了一個黑色的圖像(我認爲這是因爲控件在任何形式下都不可見)。如果我使用可見的控件,它的作品。無論如何謝謝:( – penyaskito 2009-12-15 13:59:22

+0

嗯,你總是讓它們可見,但「屏幕外」。再次不漂亮.... – Quibblesome 2009-12-15 16:14:27

+0

問題是,在Windows Mobile中,我只能有一個活動屏幕,所以把StartLocation放在它的界限之外這不是一個選項。 – penyaskito 2009-12-15 17:02:28

0

我不知道這是否會工作....但技術上你可以使用反射來調用控件的OnPaint方法並傳入你自己的圖形對象( Graphics.FromImage)在一組新的PaintEventArgs中。

這是醜陋的地獄.....但它可能工作。

相關問題