フレームと[WinAPIの】ボールの衝突

 

// データ型とデータ構造の定義は、所望のアプリケーションが含まれWINDOWS.Hファイル 
の#include <windows.hに> 
する#include <stdlib.h>に含ま
する#include <TIME.H> 
書式#include <math.h>の
LRESULTをWndProcメソッドCALLBACK(HWND、UINT、WPARAM、LPARAM); // ウィンドウ関数の説明
 // ---------次の初期化ウィンドウクラス-------------- 
INT WINAPI WinMain関数( HINSTANCE、HINSTANCE hPrevInst、lpszCmdLine LPSTR、HINSTANCE 値int nCmdShow)
{ 
    ; HWND HWND 
    MSGメッセージ、
    WNDCLASS WNDCLASS; 
    CHAR、lpszClassName [] = " ウィンドウ" ;      // ウィンドウクラス名
    チャー lpszTitle [] = "My_Windows " ;     // ウィンドウタイトル名

    // ウィンドウクラス定義 
    wndclass.style = CS_HREDRAW | CS_VREDRAW;                   // ウィンドウタイプは、デフォルトのタイプである 
    。wndclass.lpfnWndProc = WndProcメソッド       // WndProcメソッドのためのウィンドウハンドラ 
    wndclass.cbClsExtra = 0 ;              // 無膨張ウィンドウクラス 
    wndclass.cbWndExtra = 0 ;              // ウィンドウのインスタンスのない拡張 
    wndclass.hInstance = hInstanceは;      // このインスタンスハンドル

    wndclass.hIcon = LoadIcon(NULL、IDI_APPLICATION); // 最小化アイコンデフォルトアイコンにウィンドウの 
    WNDCLASS。 = LoadCursor hCursor(NULL、IDC_ARROW); //カーソルの矢印使用してウィンドウ 
    wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSHを); // ウィンドウの背景は白です 
    wndclass.lpszMenuName = NULL; // ウィンドウなしメニュー 
    wndclass.lpszClassName =、lpszClassName; // という名前のウィンドウクラス"サンプルウィンドウ"
 // -----------レジスタウィンドウクラスを
    IF(RegisterClass(&WNDCLASS)!)// 登録は、アラーム音ガオ音に失敗した場合
    { 
        のMessageBeep(0 );
         戻り値FALSEを; 
    } 

// 作成します。ウィンドウ 
    HWND = のcreateWindow(
                        lpszClassName、// ウィンドウクラス名 
                        lpszTitle、       //タイトル名ウィンドウインスタンス 
                        WS_OVERLAPPEDWINDOW、// ウィンドウスタイル
                        CW_USEDEFAULT、
                        CW_USEDEFAULT、   // デフォルト値にウィンドウ座標の左上隅
                        CW_USEDEFAULT、
                        CW_USEDEFAULT、   // ガオの窓と全体のデフォルト値に 
                        NULL、            // ウィンドウなし親ウィンドウの 
                        NULL、            // メインメニューのないこのウィンドウ 
                        hInstanceは、       // 現在扱うアプリケーションのウィンドウを作成 
                        NULLを             // この値を使用しないでください
                        ); 



    のShowWindow(HWND、nCmdShow);        // 表示窓 
    UpdateWindow(HWND);                  //は、ユーザ領域を描き
    ながら(のGetMessage(&メッセージ、NULL、00))// メッセージループ
    { 
        TranslateMessage( ; MSG)
        DispatchMessageを(MSG); 
    } 
    戻り msg.wParamと、                   // システムにプログラム終了情報バック
}
 #defineする LR(+ rect.left rect.right)
 #defineする TDを(rect.bottom + rect.top)
 の#define R&LT 50
 の#define PI ACOS(-1)// ウィンドウ関数


LRESULT CALLBACK WndProcメソッド(HWNDのhWnd、UINTメッセージ、WPARAM wParamに、LPARAM lParamに)
{ 
    HDCのhDC。
    HBRUSH HBRUSH; 
    RECTのRECT。
    HPEN HPEN; 
    PAINTSTRUCT PtStr; 
    点P、追加します。
    静的 int型のX、Y。
    静的 INT VX = 3、VY = 4 静的 INT R = 5 静的 int型 uddis = 1 ;
    静的 int型 lrdis = 1 ;
    静的な int型のトン。
    int型nextx、nexty。

    COLORREF色[ 7 ] = {RGB(25500)、RGB(2551650)、RGB(2552550)、RGB(02550)、RGB(0255255)、RGB(00255)、RGB(1390255 )}。

    スイッチ(メッセージ)
    { 
    ケースWM_CREATE: 
        srand関数(時間(NULL))。
        X =ランド()% + 10 
        Y =ランド()% + 10 
        VX =ランド()%50 
        VY =ランド()%50 
        R =ランド()%50 
        T = ランド()。
        もし(tは%2 
            VX = - VX。
        T = ランド()。
        もし(T%2 
            VY = - VY。
        リターン 0 ;
    場合WM_PAINT:
        GetClientRect(hWndは、RECT)。
        たhDC = BeginPaint関数(hWndは、&PtStr)。
        HPEN = CreatePen(PS_SOLID、3色[ 0 ])。
        HBRUSH = CreateHatchBrush(HS_BDIAGONAL、色[ 0 ])。

        SelectObject(HDC、HPEN)。
        SelectObject(HDC、HBRUSH)。
        楕円(HDC、X -r、年、X + R、Y +のR)
        nextx = X + lrdis * VX。
        nexty = Y + uddis * VY。
        もし(nextx <rect.left +R)
        { 
            nextx = rect.left + R。
            lrdis = - lrdis。
        } 
        であれば(nexty <rect.top + R)
        { 
            nexty = rect.top + R。
            uddis = - uddis。
        } 
        であれば(nextx> rect.right - R)
        { 
            nextx > rect.right - R。
            lrdis = - lrdis。
        } 
        であれば(nexty> rect.bottom - R)
        { 
            nexty = rect.bottom -R; 
            uddis = - uddis。
        } 
        、X = nextx。
        Y = nexty。
        DeleteObjectの(HPEN)。
        DeleteObjectの(HBRUSH)。
        睡眠(50 )。
        InvalidateRect(hWndは、NULL、1 )。

        EndPaint(hWndを、PtStr)。

        リターン 0 ; 

    ケースWM_DESTROY:
        PostQuitMessage(0)。                 // 调用PostQuitMessage发出WM_QUIT消息
        リターン 0 ;
    デフォルトリターンDefWindowProc関数(hWndは、メッセージ、wParamに、lParamに); // デフォルト・メッセージ・システムのデフォルトハンドラを使用します

    } 

}

 

おすすめ

転載: www.cnblogs.com/Vikyanite/p/12453855.html