2010-12-08 26 views
0


私はExtTextOut GDI APIをフックしています。 出力文字列の正確な場所を取得します。私はRECTのPARAMからか、X、Y paramsはから文字列の位置を取得することができます意味fuOptionsのPARAMためETO_CLIPPEDを取得しています、特定の場合にはLPtoDP APIの問題を使用する(GDI API)

BOOL ExtTextOut( 
    __in HDC hdc, 
    __in int X, 
    __in int Y, 
    __in UINT fuOptions, 
    __in const RECT *lprc, 
    __in LPCTSTR lpString, 
    __in UINT cbCount, 
    __in const INT *lpDx 
); 


しかし、私はLPtoDP APIを使用して位置(RECTまたはX、Y)を変換すると、間違った位置になります(変換する前に負の値が得られます)。

私は次のことを確認したときに、しかし私はそのために何indicatonを見ていない、それはオフセットが間違ってい推測:

マップモードがMM_TEXT(デフォルト)
GetWindowOrgExは0,0
GetViewportOrgExが0です、0
GetWindowExtExは1,1
GetViewportExtExは1,1

誰もが任意のアイデアを持っています、すべてのヘルプは感謝されますされていますd。おかげさまで

+0

あなたは*フックしていますか?間違ったデバイスコンテキストを使用しているように見えます。 –

+0

あなたは詳しく教えていただけますか? ExtTextOutWコールで間違ったDCを使用するにはどうすればいいですか? – Momico

答えて

0

ExtTextOut fuOptionsパラメーター にETO_CLIPPEDを指定しても、そのテキストがそのクリップに出力されるという意味ではないことを意味します。つまり、デバイスコンテキストが表示デバイスコンテキストのものであるとは保証されません。私の場合のように、メモリデバイスのコンテキストにすることができ、したがって、正しい座標を含んでいません。

msdn:ETO_CLIPPEDテキストが矩形にクリップされます。

関連する問題