ActiveBasicでスクリーンセーバーを作ろうと思います。
できればDirectXを使わずに作りたいのですが方法がわかりません。
何かよい方法はございませんでしょうか?
ABでのスクリーンセーバー
Re: ABでのスクリーンセーバー
RADで作る場合、メインウィンドウの設定を
スタイル: 「枠なし」
背景: 「色指定」より黒を選択
次に、メインウィンドウがMainWnd(ハンドルはhMainWnd)のとき、下のようなコードを記述します。
あとはタイマーなどを使って画面に変化を与えればOKです。
※手持ちのVB6の本を見ながらコードを書いただけなので、テストはしていません(^^;
スタイル: 「枠なし」
背景: 「色指定」より黒を選択
次に、メインウィンドウがMainWnd(ハンドルはhMainWnd)のとき、下のようなコードを記述します。
コード: 全て選択
TypeDef HIMC=HANDLE
Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As VoidPtr,bInitialOwner As Long,lpName As String) As Long
Declare Function ImmAssociateContext Lib "imm32"(hWnd As HWND,hIMC As HIMC) As HIMC
Dim hIMC As HIMC
Dim bMouseMoveFlag=0 As Long
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
CreateMutex(0,0,"AucMon")
If GetLastError()=183 Then ExitProcess(0)
/*ここに前処理を記述*/
ShowWindow(hMainWnd,SW_SHOWMAXIMIZED)
ShowCursor(0)
hIMC=ImmAssociateContext(hMainWnd,0)
End Sub
Sub MainWnd_MouseMove(flags As Long, x As Integer, y As Integer)
If bMouseMoveFlag Then DestroyWindow(hMainWnd) Else bMouseMoveFlag=1
End Sub
Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
DestroyWindow(hMainWnd)
End Sub
Sub MainWnd_Destroy()
ShowCursor(1)
ImmAssociateContext(hMainWnd,hIMC)
/*ここに後処理を記述*/
End Sub
※手持ちのVB6の本を見ながらコードを書いただけなので、テストはしていません(^^;
[hira]
http://hira.hopto.org/
http://hira.hopto.org/
ありがとうございます
hira様、早速のご返事本当にありがとうございます。ひとつだけうまくいかなかったところがありますので、その部分を報告させていただきます。
【問題点】
マウスを動かさなくても起動直後にスクリーンセーバーが終了してしまう
【変更点】
定義部
起動時の処理
マウスが動いたときの処理
のようにしました。
これからもよろしくお願いいたします。
【問題点】
マウスを動かさなくても起動直後にスクリーンセーバーが終了してしまう
【変更点】
定義部
コード: 全て選択
Dim BeforePos As POINTAPI
コード: 全て選択
GetCursorPos(BefPos)
コード: 全て選択
Sub MainWnd_MouseMove(flags As Long, x As Integer, y As Integer)
If BeforePos.x<>x or BeforePos.y<>y Then DestroyWindow(hMainWnd)
End Sub
これからもよろしくお願いいたします。