GetWindowDC

機能
ウィンドウ全体のデバイスコンテキストを取得する
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