指定したデバイスコンテキストのウィンドウ原点を指定          <TOP>


SetViewportOrgEx デバイスのどの点がウィンドウの原点を指しているのか指定
TextOut 文字を描画
GetDC 指定されたウィンドウのデバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
 

ビューポートを「70,40」に変更した点がTextOut(0,0・・・の位置になる。

 
'================================================================
'= 指定したデバイスコンテキストのウィンドウ原点を指定
'=    (SetViewportOrgEx.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    x As Long
    y As Long
End Type

#define TRANSPARENT 1                   '背景色を設定しない

' デバイスのどの点がウィンドウの原点を指しているのか指定
Declare Function Api_SetViewportOrgEx& Lib "gdi32" Alias "SetViewportOrgEx" (ByVal hDC&, ByVal nX&, ByVal nY&, lpPoint As POINTAPI)

' 指定されたデバイスコンテキストのビューポートの原点のx座標とy座標を取得
Declare Function Api_GetViewportOrgEx& Lib "gdi32" Alias "GetViewportOrgEx" (ByVal hDC&, lpPoint As POINTAPI)

' 文字を描画
Declare Function Api_TextOut& Lib "gdi32" Alias "TextOutA" (ByVal hDC&, ByVal nXStart&, ByVal nYStart&, ByVal lpString$, ByVal cbString&)

' バックグラウンドの塗りつぶしモード設定
Declare Function Api_SetBkMode& Lib "gdi32" Alias "SetBkMode" (ByVal hDC&, ByVal iBkMode&)

' 指定されたウィンドウのデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

Var Shared Button1 As Object

Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var pa As POINTAPI
    Var hDC As Long
    Var txt As String
    Var Ret As Long

    hDC = Api_GetDC(GethWnd)

    'ビューポートの原点を変更
    Ret = Api_SetViewportOrgEx(hDC, 70, 40, pa)

    Ret = Api_SetBkMode(hDC, TRANSPARENT)

    '変更した原点に文字列を描画
    txt = "TextOut(hDC, 0, 0, ・・・"
    Ret = Api_TextOut(hDC, 0, 0, txt, Len(txt))

    txt = "TextOut(hDC, -70, -40, ・・・"
    Ret = Api_TextOut(hDC, -70, -40, txt, Len(txt))


    Ret = Api_GetViewportOrgEx(hDC, pa)
    A% = MessageBox("", Str$(pa.x) & "/" & Str$(pa.y), 0, 2)

    Ret = Api_ReleaseDC(GethWnd, hDC)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End