Star Mark

[C++ 空のプロジェクト]から作成してカラーで星のマークを描画します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. [C++ 空のプロジェクト]から作成すると、余計なファイルが作成されず「すっきりしたプロジェクト」を構築することが出来ます。
    2019/09 Windows10 & Visual Studio Professional 2019 16.2.3 の環境で星のマークを描画します。
    プロジェクトの作成は Empty Hello を参照して下さい。
  2. Empty Hello では Text を印字したのですが、今回は星のマークを描画します。
    三角関数を使うので math.h を #include して下さい。
    乱数の初期化で現在時刻を使うので time.h を #include して下さい。
    二次元座標を回転する rot() 関数です。後位参照が起こらないように #include の直後にでも置いてください。
    #include    <math.h>        //算術関数
    #include    <time.h>        //現在時刻で乱数を初期化 
    
    // 回転計算(rt=度)、中心(0,0)、半径(rt)、結果(*pt)
    void  rot(float rt, float rl, POINT* pt)
    {
        pt->x = (LONG)(sin(rt / 180 * 3.14) * rl);
        pt->y = (LONG)(cos(rt / 180 * 3.14) * rl);
    }
    
  3. WM_PAINT: で星のマークを描画します。
    LRESULT  CALLBACK  WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        PAINTSTRUCT ps;
        HDC         hdc;
    
        //渡された message から、イベントの種類を解析する
        switch (msg)
        {
        case WM_PAINT:
            hdc = BeginPaint (hWnd, &ps);
            // 星形を三角形に分割して色を塗る
            POINT   pont[24];
            int     i;
            HBRUSH      hBrush,hOldBrush;
            time_t      nowtime;
            time(&nowtime);
            srand(nowtime&0Xff);
            ZeroMemory(pont,sizeof(POINT)*24);
            // 回転座標を設定する
            for(i=0; i<6; i++)
            {   rot(i*72.0F,38.0F,&pont[i*4]);
                rot(i*72.0F+36.0F,100.0F,&pont[i*4+2]);
            }
            // 回転座標の中心が 0,0 なので中心座標を移動
            for(i=0; i<24; i++)
            {   pont[i].x+= 240;
                pont[i].y+= 170;
            }
            // 乱数で色を設定して、星型を描画
            hBrush= CreateSolidBrush(RGB(rand()&0XFF,rand()&0XFF,rand()&0XFF));
            hOldBrush= (HBRUSH)SelectObject(hdc,hBrush);
            for(i=0; i<10; i++)
            {   Polygon(hdc,pont+i*2,3);
                DeleteObject(hBrush);
                hBrush= CreateSolidBrush(RGB(rand()&0XFF,rand()&0XFF,rand()&0XFF));
                SelectObject(hdc,hBrush);
            }
            SelectObject(hdc,hOldBrush);
            DeleteObject(hBrush);
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0L;
        }
        //デフォルトの処理
        return  DefWindowProc(hWnd, msg, wParam, lParam);
    }
    
  4. コンパイルするとページ先頭の画像が描画されます。
    ウインドウの端をマウスでつかんでサイズを変更してみて下さい。
    WM_PAINT: が呼び出されて、図形の色が変わります。

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

超初心者のプログラム入門(C言語 Windows)