TOP >> マニアックなプログラミング
トリッキーコードネット トリッキーなコード

【7行プログラミング/ショートコーディング】ラスタースクロール その3 (Win32API・C言語)

ラスタースクロールプログラミング その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)で描画のお掃除をして、処理終了♪ チャンチャン \(* ̄(エ) ̄*)/
トリッキーコードネット の TOPへ HOTNEWS の 総合TOPへ