スクリーンセーバー

スクリーンセーバーの基本

VCでスクリーンセーバを作るのはきわめて簡単です。SDKのscrnsave.libを使えるからです。
しかしscrnsave.libはVC固有(COFF)のため他のCコンパイラでは使えません。
ABともなるとさらに絶望的です。
でも、作ることはできます。
本当はコマンドラインオプションが必要ですが、省略します。

まず、プロジェクトを作ります。私はssaverとしました。何でもいいです。

次にウインドウを設定します。
ウインドウスタイルをポップアップの枠無しにします。これで[_][□][x]が出なくなります。
さらに最大化にチェックを入れておきます。
次に[拡張スタイルを設定]ボタンを押して最前面ウインドウにします。

以上で全てのウインドウを覆い隠すウインドウを作成できます。

終了処理

このままでは単なるたちの悪いプログラムです。
ウインドウを閉じる処理を作ります。
'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim pt As POINTAPI
Dim pt_orig As POINTAPI
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
    ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
If     dwMsg = WM_LBUTTONDOWN Or _
    dwMsg = WM_RBUTTONDOWN Or _
    dwMsg = WM_MBUTTONDOWN Or _
    dwMsg = WM_KEYDOWN Or _
    dwMsg = WM_SYSKEYDOWN Then
        MainWnd_Destroy()
End If

If     dwMsg = WM_MOUSEMOVE Then
    GetCursorPos(pt)
    If Not(pt.x = pt_orig.x And pt.y = pt_orig.y) Then
          MainWnd_Destroy()
    End If
End If

    ' イベントプロシージャの呼び出しを行います。
    MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
    ssaver_DestroyObjects()
    PostQuitMessage(0)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
    GetCursorPos(pt_orig)
End Sub
以上です。
これで、キーやマウス入力でウインドウを閉じることが出来るようになります。

あとはウインドウにお絵かきするだけです。
タイマー処理を使うと良いでしょう。
拡張子をexeからscrにします。
ソースおいときます。