2015-03-31 47 views
-1

我有一個帶觸控筆的平板電腦,在正常操作中,由於硬件提供了正確的座標,所以很容易繪製出觸筆的位置。然後我通過ChangeDisplaySettingsEx API旋轉顯示器90º,在這種情況下,我必須應用我想避免的翻譯(第二顯示器)+旋轉。然後我在MSDN上閱讀了關於這種風格的DS_ABSALIGN:DS_ABSALIGN風格以避免計算

指示對話框的座標是屏幕 座標。如果未指定此樣式,則座標爲 客戶端座標。

我想在屏幕座標中繪製一個直流座標,這就是我所要求的座標,而不是客戶座標,但是定義該座標並沒有什麼區別。

//unaffected by the style 
DrawIcon(hDevCtx, m_Point.x, m_Point.y, LoadCursor(NULL, IDC_ARROW)); 

是否有任何方法在屏幕座標中繪製圖標?

編輯:最後,我只好做了計算,每轉,所以我關閉問題

+2

我的直覺告訴我,'DS_ABSALIGN'只適用於對話框模板中指定的座標,而不適用於稍後創建的DC;那些仍然在客戶空間。我肯定不知道。你爲什麼關心計算? 'MapWindowPoints()'會爲你做屏幕/客戶端轉換工作。 – andlabs 2015-03-31 15:50:55

+0

只是爲了節省時間:) – user311174 2015-03-31 19:19:18

+0

寫代碼的時間?或者在繪圖代碼中運行時間?如果是後者,那麼它確實沒有什麼區別(程序在繪圖處理程序中做的事情要複雜得多)。 – andlabs 2015-03-31 19:41:32

回答

1

座標傳遞給DrawIcon()取決於你有什麼樣的DC。例如,假設您使用GetDC()來獲得DC。如果你傳遞一個窗口句柄,你傳遞給DrawIcon()的座標將相對於該窗口的客戶區域。如果您將0傳遞給GetDC(),則座標將相對於桌面屏幕。如果你想在桌面屏幕上繪製,然後使用GetDC(0)或更好的方法(如果有的話)。如果您只是想將屏幕座標轉換爲客戶端座標或反之亦然,請使用ScreenToClient()或ClientToScreen()

+0

我不知道這個功能,只要我可以測試它,我會接受它作爲答案 – user311174 2015-04-06 09:21:47