トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> 7行プログラミング >> ラスタースクロールプログラミング - その3 (Win32API)

ラスタースクロールプログラミング その3 (Win32API)

ラスタースクロールプログラミング その2の続きです。
とうとう7行を達成しました~♪
(※ 2ちゃんねるに掲載されていた元コードのままでは、VC++2005でコンパイルエラーが発生した為、
    コンパイルが通る様、若干修正を加えてあります^^;)

#include <windows.h>
#include <math.h>
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){HDC d,e;int x=GetSystemMetrics(
0),y=GetSystemMetrics(1),n,f;d=GetDC(0);SelectObject(e=CreateCompatibleDC(d),
CreateCompatibleBitmap(d,x,y));BitBlt(e,0,0,x,y,d,0,0,SRCCOPY);while(!(
GetKeyState(1)&(1<<31))){for(n=0;n<y;n++)BitBlt(d,sin((n)*3.0/y)*sin((f++)/
40.0)*60,n,x,1,e,0,n,SRCCOPY);Sleep(1);}InvalidateRect(0,0,1);return 0;}
適当にインデント・改行を入れて、見やすくしたものがこちら↓
#include <windows.h>
#include <math.h>

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    HDC d, e;
    int x = GetSystemMetrics(0),
        y = GetSystemMetrics(1),
        n,
        f;

    d = GetDC(0);

    SelectObject(
                    e = CreateCompatibleDC(d),
                    CreateCompatibleBitmap(d,x,y)
                );

    BitBlt(e, 0, 0, x, y, d, 0, 0, SRCCOPY);

    while (! (GetKeyState(1)&(1<<31)) ) {
        for (n = 0; n < y; n++)
            BitBlt(d, sin((n) * 3.0/y) * sin((f++) / 40.0) * 60, n, x, 1, e, 0, n, SRCCOPY);

        Sleep(1);
    }

    InvalidateRect(0,0,1);
    return 0;
}
ウィンドウを作成せず、デスクトップDCにそのまま描画してしまう方法です。 whileループ内で、 GetKeyState()の戻り値と 「1 << 31」をAnd演算する事により、 GetKeyState()の戻り値の最上位bitを取得します。 これがfalseの間、つまり、キーが押されていない間デスクトップDCに描画を行います。 最後に InvalidateRect(NULL, NULL, TRUE)で描画のお掃除をして、処理終了♪ チャンチャン \(* ̄(エ) ̄*)/
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。