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

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> 7行プログラミング >> 砂嵐表示プログラミング - その2 (Win32API)

砂嵐プログラミング その2 (Win32API)

砂嵐プログラミング その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へ続きます。
         このエントリーをはてなブックマークに追加   


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




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





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




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