fadein/fadeout でタイトルを表示

fadein / fadeout でタイトル画面を表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. fadein/fadeout でタイトルを表示します。
    普通に描画したのでは、多少画面が「チラツク」のは仕方ありません。
    チラツキを無くす方法は 「ちらつき」を抑えて描画 を参照して下さい。
  2. ID_TIMER はタイマのIDで、タイマ割り込みで fadein/fadeout を制御します。
    HFONT hFont; はタイトルを表示するフォントを設定する領域です。
    CNT は fadein/fadeout の文字の濃さを制御する領域で、タイマ割り込みで「200~0」まで変化します。
        /***********************************************************/
        /*★ FadeIN, FadeOUT のプログラム    2006/01/12  前田 稔 ★*/
        /***********************************************************/
        #define     NAME    "Fade IN/OUT"
        #include    <windows.h>
        #define     ID_TIMER    (WM_APP + 0)
    
        HINSTANCE   g_hInst;
        HWND        g_hWnd;
        HFONT       hFont,hFontOld;
        int         CNT= 200;
        
  3. CALLBACK 関数の WM_CREATE: です。
    SetMyFont() でタイトルを表示するフォントを生成します。
    SetTimer() でタイマを起動して fadein を開始します。
            case WM_CREATE:
                hFont= SetMyFont((LPCTSTR)"MS 明朝",128,0);
                SetTimer(hWnd,ID_TIMER,50,NULL);
                break;
        
  4. WM_PAINT: でタイトル文字を表示します。
    CNT はタイマ割りこみで「200から0」にカウントダウンされるので、i の値は「0~100~0」になります。
    i=0 のときが背景色と同じ色で、i=100 のときが最も濃い色です。
    r,g,b が赤緑青のレベルで、128 が GRAY_BRUSH と同じ色の設定です。
    if 命令で r,g,b の値が「0~255」を超えないようにしています。
    色の設定が終わればフォントを設定してタイトルを描画します。
        int     r,g,b;
    
            case WM_PAINT:
                hdc= BeginPaint(hWnd,&ps);
                i= CNT;
                if (i>100)  i= 100-(i-100);     //i= 0~100~0
                r= 128+i;
                g= 128+i/3;
                b= 128-i*2;
                if (r>255)  r= 255;
                if (b<0)    b= 0;
                SetTextColor(hdc,RGB(r,g,b));
                SetBkMode(hdc,TRANSPARENT);
                hFontOld= (HFONT)SelectObject(hdc,hFont);
                TextOut(hdc,50,60,"Windows",7);
                SelectObject(hdc,hFontOld);
                EndPaint(hWnd,&ps);
                break;
        
  5. WM_TIMER: では CNT がゼロになるまでカウントダウンします。
    InvalidateRect() でウインドウをクリアして、WM_PAINT: を呼び出します。
            case WM_TIMER:
                if (CNT)
                {   CNT--;
                    InvalidateRect(hWnd,NULL,TRUE);
                }
                break;
        
  6. WM_KEYDOWN: では、ESC キーを検出してプログラムを終了します。
            case WM_KEYDOWN:            //KEY が押された
                switch(wParam)
                {   case VK_ESCAPE:     //ESC KEY
                        DestroyWindow(hWnd);
                        return 0L;
                }
                break;
        
  7. WM_DESTROY: ではタイマを停止して、リソースを開放して下さい。
            case WM_DESTROY:
                KillTimer(hWnd,ID_TIMER);
                DeleteObject(hFont);
                PostQuitMessage(0);
                return 0L;
        
  8. WinMain() ではウインドウの背景色に GRAY_BRUSH を設定して下さい。
        WNDCLASS wc = { CS_CLASSDC,WndProc,0L,0L,hInst,NULL,LoadCursor(NULL,IDC_ARROW),
                        (HBRUSH)GetStockObject(GRAY_BRUSH),NULL,NAME };
        

【演習】

  1. プログラムを完成させて下さい。
  2. フォントの設定は 文字フォントを設定して描画する を参照して下さい。
  3. Enter キーで fadein を開始するようにプログラムして下さい。

超初心者のプログラム入門(Win32API C++)