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

【7行プログラミング/ショートコーディング】砂嵐表示 その2 (Win32API・C言語)

砂嵐プログラミング その1 の続きです。
前回のコードを最適化(?)して、多少短くなったコードです。
(13行 ⇒ 11行になりました~♪)

#include <windows.h> PAINTSTRUCT p;HBITMAP q;HDC e;char*k,y[1<<20];int a=640,b=400,i,t[11]={40,a,b, 2097153},r;long WINAPI f(HWND d,UINT m,UINT w,long l){if(m==15){GetDIBits((e= CreateCompatibleDC(BeginPaint(d,&p))),(q=CreateCompatibleBitmap(p.hdc,a,b)),0, b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*4;k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16; SetDIBitsToDevice(p.hdc,0,0,a,b,0,0,0,b,y,(BITMAPINFO*)t,0);DeleteObject(q); DeleteDC(e);return !InvalidateRect(d,0,!EndPaint(d,&p));}if(m==2) PostQuitMessage(0);return DefWindowProc(d,m,w,l);}int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int n){WNDCLASS w={3,f,0,0,i,0,LoadCursor(0,IDC_ARROW),0,0, "Tricky"};RegisterClass(&w);ShowWindow(CreateWindow("Tricky","砂",1<<19,99,99, a,b,0,0,i,0),n);for(MSG m;GetMessage(&m,0,0,0);DispatchMessage(&m));return 0;}
適当にインデント・改行を入れて、見やすくしたものがこちら↓
#include <windows.h> PAINTSTRUCT p; HBITMAP q; HDC e; char * k, y[1<<20]; int a=640, b=400, i, t[11]={40,a,b,2097153}, r; long WINAPI f(HWND d,UINT m,UINT w,long l) { if (m == 15) { /* WM_PAINT */ GetDIBits( (e=CreateCompatibleDC(BeginPaint(d,&p))), (q=CreateCompatibleBitmap(p.hdc,a,b)), 0, b, 0, (BITMAPINFO*)t, 0 ); for (k=y; k<y+a*b*4; k+=4) *k = *(k+1) = *(k+2) = (r=r*9+5)>>16; SetDIBitsToDevice(p.hdc,0,0,a,b,0,0,0,b,y,(BITMAPINFO*)t,0); DeleteObject(q); DeleteDC(e); return !InvalidateRect(d,0,!EndPaint(d,&p)); } if(m==2) /* WM_DESTROY */ PostQuitMessage(0); return DefWindowProc(d,m,w,l); } int WINAPI WinMain(HINSTANCE i, HINSTANCE, LPSTR, int n) { WNDCLASS w={3,f,0,0,i,0,LoadCursor(0,IDC_ARROW),0,0, "Tricky"}; RegisterClass(&w); ShowWindow(CreateWindow("Tricky","砂",1<<19,99,99,a,b,0,0,i,0),n); for (MSG m; GetMessage(&m,0,0,0); DispatchMessage(&m)); return 0; }
基本的なプログラムの流れは、前回のコードと変わりありません。 「関数の戻り値を 別関数の引数にする」等で、コードの文字数を減らしています。 砂嵐プログラミング その3へ続きます。
トリッキーコードネット の TOPへ HOTNEWS の 総合TOPへ