ウィンドウ全体のデバイスコンテキストを取得する
Declare Function GetWindowDC Lib "user32.dll" _
(ByVal hWnd As Long) As Long
Declare Function GetWindowDC Lib "user32.dll" _
(ByVal hWnd As Integer) As Integer
HDC GetWindowDC(
HWND hWnd
);
引数
hdc
ウィンドウのハンドル戻り値
成功したとき デバイスコンテキストのハンドル備考
失敗したとき 0
ウィンドウ全体とはメニュバーやキャプションバーなどの非クライアント領域とサンプル
ボタンなどを配置できるクライアント領域の両方を合わした領域のこと。
サンプルではメニューバー内に文字をスクロールさせている。
しかし、必然性がない限り使う必要性はない。
取得したハンドルはReleaseDC()関数を使って解放する
ダウンロード(GetWindowDC.lzh 2.60KB)
Private Sub Command1_Click()
If Me.Timer1.Enabled = False Then
Me.Timer1.Enabled = True
Me.Command1.Caption = "スクロールを停止する"
Else
Me.Timer1.Enabled = False
Me.Command1.Caption = "スクロールを開始する"
If Me.Text1.Text = "" Then
Me.Command1.Enabled = False
Else
Me.Command1.Enabled = True
End If
End If
End Sub
Private Sub Form_Load()
Me.Command1.Caption = "スクロールを開始する"
Me.Timer1.Enabled = False
Me.Timer1.Interval = 300
Me.Text1.Text = "WinAPIデータベースforVBProgrammer"
End Sub
Private Sub Text1_Change()
Dim txt As String
txt = Me.Text1.Text
If txt = "" Then
If Me.Timer1.Enabled = True Then
Me.Command1.Enabled = True
Else
Me.Command1.Enabled = False
End If
Else
Me.Command1.Enabled = True
End If
End Sub
Private Sub Timer1_Timer()
Dim txt As String, temp As String
Dim hdc As Long
'ウィンドウ全体のデバイスコンテキストを取得する
hdc = GetWindowDC(Me.hWnd)
'文字の色を設定する
Call SetTextColor(hdc, Val("&Hffffff"))
'文字のバックを透過設定にする
Call SetBkMode(hdc, TRANSPARENT)
'スクロールする文字を取得する
txt = Me.Text1.Text
For a = 1 To Len(txt)
'文字を抜き出す
temp = Mid(txt, a, Len(txt) - a + 1)
'ここは仮に8文字にしてあるだけ
If Len(temp) > 8 Then
temp = Mid(temp, 1, 8)
End If
'描画処理
'(最大値を変更すればスクロール速度が遅くなる)
For b = 1 To 30
Call TextOut(hdc, 100, GetSystemMetrics(SM_CXFRAME) - 1, temp, LenB(temp))
Call Sleep(1)
Next
'非クライアント領域の再描画
Call SendMessage(Me.hWnd, WM_NCACTIVATE, 1, 0)
Next
'デバイスコンテキストの解放
Call ReleaseDC(Me.hWnd, hdc)
End Sub