BeginPaint

機能
ウィンドウの再描画を準備する
Declare Function BeginPaint Lib "user32.dll" _
(ByVal hwnd As Long, lpPaint As PAINTSTRUCT) As Long
Declare Function BeginPaint Lib "user32.dll" _
(ByVal hwnd As Integer, lpPaint As PAINTSTRUCT) As Integer

HDC BeginPaint(
HWND hwnd,
LPPAINTSTRUCT lpPaint
);
引数
hwnd

再描画するウィンドウのハンドル
lpPaint
(戻り値)描画に関する情報を受け取るPAINTSTRUCT構造体
戻り値
正常終了のとき                      デバイスコンテキストのハンドル
エラーのとき                        0
ダウンロード
ダウンロード(BeginPaint.lzh 13.6KB)

Public Const IDM_BUTTON1 = &H100
Dim memdc As Long

Public Sub Main() Dim wcl As WNDCLASSEX, msg As Message Dim rc As Long Dim hDlg As Long 'メインウィンドウの登録 With wcl .cbSize = Len(wcl) .lpszClassName = "myWin" .lpfnWndProc = ChangeAddressOf(AddressOf WndProc) .style = 0 .cbClsExtra = 0 .cbWndExtra = 0 .lpszMenuName = 0 .hbrBackground = GetStockObject(WHITE_BRUSH) .hInstance = App.hInstance '.hIcon = LoadIcon(App.hInstance, ByVal 32512) .hIcon = LoadIcon(0, ByVal 32512) .hCursor = LoadCursor(0, ByVal 32512) End With Call RegisterClassEx(wcl) 'メインウィンドウの作成 hDlg = CreateWindowEx(WS_EX_CLIENTEDGE, wcl.lpszClassName, "ただいま再描画の実験中!", _ WS_CAPTION Or WS_VISIBLE Or WS_SYSMENU Or WS_MINIMIZEBOX, _ CW_USEDEFAULT, CW_USEDEFAULT, 370, 80, 0, 0, 0, 0) memdc = OpenBITMAP(GetDC(hDlg), 370, 80) 'コマンドボタンの作成 Call CreateWindowEx(0, "Button", "押す", WS_CHILD Or BS_PUSHLIKE Or WS_VISIBLE, _ 300, 10, 50, 30, hDlg, IDM_BUTTON1, 0, 0) 'メインウィンドウの表示 Call ShowWindow(hDlg, SW_SHOW) 'メッセージループ Do While (GetMessage(msg, 0, 0, 0)) Call TranslateMessage(msg) Call DispatchMessage(msg) Loop Call CloseBITMAP(memdc) End Sub
Public Function WndProc(ByVal hWnd As Long, ByVal msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Dim hdc As Long, lpPaint As PAINTSTRUCT Select Case msg Case WM_COMMAND If LWORD(wParam) = IDM_BUTTON1 Then 'デバイスコンテキストの取得 hdc = GetDC(hWnd) temp = "他のウィンドウを重ねてみてください!" rc = LenB(StrConv(temp, vbFromUnicode)) Call TextOut(memdc, 10, 10, temp, rc) '文字列 Call TextOut(hdc, 10, 10, temp, rc) '文字列 Call ReleaseDC(hWnd, hdc) End If Case WM_PAINT With lpPaint.rcPaint hdc = BeginPaint(hWnd, lpPaint) Call BitBlt(hdc, .x, .y, .dx, .dy, memdc, .x, .y, SRCCOPY) Call EndPaint(hWnd, lpPaint) End With Case WM_CLOSE Call DestroyWindow(hWnd) Call PostQuitMessage(0) End Select WndProc = DefWindowProc(hWnd, msg, wParam, lParam) End Function
Public Function ChangeAddressOf(ByVal Address As Long) As Long ChangeAddressOf = Address End Function
Public Function HWORD(ByVal LongValue As Long) As Integer '長整数値から上位ワードを取得する HWORD = (LongValue And &HFFFF0000) \ &H10000 End Function
Public Function LWORD(ByVal LongValue As Long) As Integer '長整数値から下位ワードを取得する If (LongValue And &HFFFF&) > &H7FFF Then LWORD = (LongValue And &HFFFF&) - &H10000 Else LWORD = LongValue And &HFFFF& End If End Function
Public Function GetLong(ByVal UpperWord As Integer, ByVal LowerWord As Integer) As Long '下位・上位を与えて長整数値(32ビット値)を取得する GetLong = (LowerWord And &HFFFF&) Or (UpperWord * &H10000) End Function