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

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

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

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

ザ~っという砂嵐プログラミングです^^;)
(2ちゃんねるから拾ってきたコードの為、元ネタではアプリケーションタイトルが "2ch"になっていましたが、ここでは "砂" にしますw)

#include <windows.h>
int i,r,a=640,b=400;long t[11]={40,640,400,2097153};char*k,y[0xfa000];long
WINAPI WndProc(HWND d,UINT m,UINT w,long l){PAINTSTRUCT p;switch(m){case 15:
HBITMAP q;HDC e;e=CreateCompatibleDC(BeginPaint(d,&p));GetDIBits(e,(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);EndPaint(d,&p);InvalidateRect
(d,0,0);return 0;case 2:PostQuitMessage(0);}return DefWindowProc(d,m,w,l);}int
WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int n){MSG m;WNDCLASS w;w.style=3;w
.lpfnWndProc=WndProc;w.cbWndExtra=w.cbClsExtra=0;w.lpszMenuName=0;w.hIcon=0;w.
hbrBackground=0;w.hCursor=LoadCursor(0,IDC_ARROW);w.lpszClassName="Tricky゙";w.
hInstance=i;RegisterClass(&w);ShowWindow(CreateWindow("Tricky","砂",1<<19,99,
99,a,b,0,0,i,0),n);while(GetMessage(&m,0,0,0))DispatchMessage(&m);return 0;}
さっそくコンパイルして実行してみましょう~♪ ※VC++2005では、構成プロパティ - 全般 - 文字セット を「マルチバイト文字セットを使用する」に設定しないと、 おそらくコンパイルエラーが発生します。 ※また、「warning C4244: 'return' : 'LRESULT' から 'long' への変換です。データが失われる可能性があります。」 といった警告が表示されますが、無視しちゃいましょう^^;) 実行結果は以下の通り 砂嵐プログラミング 実行ファイル(.exe)も置いておくので、よろしければダウンロードして実行してみて下さい。⇒ code21.zip 適当にインデント・改行を入れて、見やすくしたものがこちら↓
#include <windows.h>
int i,r,a=640,b=400;
long t[11]={40,640,400,2097153};
char*k,y[0xfa000];

long WINAPI WndProc(HWND d,UINT m,UINT w,long l)
{
    PAINTSTRUCT p;
    switch(m){

    case 15: /* WM_PAINT */
        HBITMAP q;
        HDC e;
        e=CreateCompatibleDC(BeginPaint(d,&p));

        GetDIBits(e,
            (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);
        EndPaint(d,&p);
        InvalidateRect(d,0,0);
        return 0;

    case 2: /* WM_DESTROY */
        PostQuitMessage(0);

    }
    return DefWindowProc(d,m,w,l);
}

int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int n)
{
    MSG m;
    WNDCLASS w;

    w.style          = 3;
    w.lpfnWndProc    = WndProc;
    w.cbWndExtra     = w.cbClsExtra = 0;
    w.lpszMenuName   = 0;
    w.hIcon          = 0;
    w.hbrBackground  = 0;
    w.hCursor        = LoadCursor(0,IDC_ARROW);
    w.lpszClassName  = "Tricky";
    w.hInstance      = i;

    RegisterClass(&w);

    ShowWindow(CreateWindow("Tricky","砂",1<<19,99,99,a,b,0,0,i,0),n);

    while (GetMessage(&m,0,0,0))
        DispatchMessage(&m);

    return 0;
}
必要最低限のWindowsAPIが、モリモリ詰め込まれていてステキ (n‘∀‘)η) (※最適化前のコードはコチラに載せてあります)
さてさて、 このコードだけでも、Windowsプログラミング初心者には、非常~~に勉強になるわけですが、 機能はそのままで、更にどんどんコードが短くなっていきます。 砂嵐プログラミング その2へ続きます。
         このエントリーをはてなブックマークに追加   


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




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





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




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