ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140925
    부산IT학원/스마트컨트롤러 2014. 9. 25. 17:38

    146일차



    #include <windows.h>


    #define BITMAP_MAXSIZE (1024*768*3+10)

    #define XOFFSET 280

    #define X_WIDTH_SIZE 150


    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

    HINSTANCE g_hInst;

    LPCTSTR lpszClass=TEXT("First");


    int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

     ,LPSTR lpszCmdParam,int nCmdShow)

    {

    HWND hWnd;

    MSG Message;

    WNDCLASS WndClass;

    g_hInst=hInstance;

    WndClass.cbClsExtra=0;

    WndClass.cbWndExtra=0;

    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);

    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);

    WndClass.hInstance=hInstance;

    WndClass.lpfnWndProc=WndProc;

    WndClass.lpszClassName=lpszClass;

    WndClass.lpszMenuName=NULL;

    WndClass.style=CS_HREDRAW | CS_VREDRAW;

    RegisterClass(&WndClass);


    hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,

    CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

    NULL,(HMENU)NULL,hInstance,NULL);

    ShowWindow(hWnd,nCmdShow);

    while (GetMessage(&Message,NULL,0,0)) {

    TranslateMessage(&Message);

    DispatchMessage(&Message);

    }

    return (int)Message.wParam;

    }


    unsigned char * BMbuf;

    HBITMAP Screen;


    LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

    {

    HDC hdc;

    static HDC MemDC;

    PAINTSTRUCT ps;

    HANDLE hFile;

    DWORD dwRead;

    TCHAR str[1024];

    static BITMAPFILEHEADER * stpBFH;

    static BITMAPINFOHEADER * stpBIH;

    static unsigned int uiX;

    static unsigned int uiY;

    unsigned int uiXcount;

    unsigned int uiYcount;

    unsigned char * ucpPixel;

    static unsigned int uiPad;

    HBITMAP OldBitmap;

    RECT rt;

    switch (iMessage)

    {

    case WM_CREATE:

    hFile = CreateFile(TEXT("image.bmp"),

    GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);


    BMbuf = (unsigned char *)malloc(BITMAP_MAXSIZE);

    if(0 == BMbuf)

    {

    MessageBox(hWnd, TEXT("동적할당을 받을 수 없습니다."), TEXT("오류"), MB_OK);

    DestroyWindow(hWnd);

    }

    if(INVALID_HANDLE_VALUE != hFile)

    {

    ReadFile(hFile, BMbuf, BITMAP_MAXSIZE, &dwRead, NULL);

    CloseHandle(hFile);


    stpBFH = (BITMAPFILEHEADER *)BMbuf;

    stpBIH = (BITMAPINFOHEADER *)(BMbuf + sizeof(BITMAPFILEHEADER));


    wsprintf(str, TEXT("[%c][%c]"), BMbuf[0], BMbuf[1]);

    CreateWindow(TEXT("static"), TEXT("파일 타입 : "), WS_CHILD | WS_VISIBLE,

    20, 20, 90, 20, hWnd, (HMENU)-1, g_hInst, NULL);

    CreateWindow(TEXT("static"), str, WS_CHILD | WS_VISIBLE,

    110, 20, X_WIDTH_SIZE, 20, hWnd, (HMENU)-1, g_hInst, NULL);


    wsprintf(str, TEXT("[%d byte]"), stpBFH->bfSize);

    CreateWindow(TEXT("static"), TEXT("파일 크기 : "), WS_CHILD | WS_VISIBLE,

    20, 40, 90, 20, hWnd, (HMENU)-1, g_hInst, NULL);

    CreateWindow(TEXT("static"), str, WS_CHILD | WS_VISIBLE,

    110, 40, X_WIDTH_SIZE, 20, hWnd, (HMENU)-1, g_hInst, NULL);


    wsprintf(str, TEXT("[%u]"), stpBIH->biWidth);

    CreateWindow(TEXT("static"), TEXT("가로 크기 : "), WS_CHILD | WS_VISIBLE,

    20, 60, 90, 20, hWnd, (HMENU)-1, g_hInst, NULL);

    CreateWindow(TEXT("static"), str, WS_CHILD | WS_VISIBLE,

    110, 60, X_WIDTH_SIZE, 20, hWnd, (HMENU)-1, g_hInst, NULL);

    uiX = (unsigned int)(stpBIH->biWidth);

    uiPad = uiX%4;


    wsprintf(str, TEXT("[%u]"), stpBIH->biHeight);

    CreateWindow(TEXT("static"), TEXT("세로 크기 : "), WS_CHILD | WS_VISIBLE,

    20, 80, 90, 20, hWnd, (HMENU)-1, g_hInst, NULL);

    CreateWindow(TEXT("static"), str, WS_CHILD | WS_VISIBLE,

    110, 80, X_WIDTH_SIZE, 20, hWnd, (HMENU)-1, g_hInst, NULL);

    uiY = (unsigned int)(stpBIH->biHeight);


    wsprintf(str, TEXT("[%08X]"), stpBFH->bfOffBits);

    CreateWindow(TEXT("static"), TEXT("bfOffbits : "), WS_CHILD | WS_VISIBLE,

    20, 100, 90, 20, hWnd, (HMENU)-1, g_hInst, NULL);

    CreateWindow(TEXT("static"), str, WS_CHILD | WS_VISIBLE,

    110, 100, X_WIDTH_SIZE, 20, hWnd, (HMENU)-1, g_hInst, NULL);

    hdc = GetDC(hWnd);

    MemDC = CreateCompatibleDC(hdc);

    GetClientRect(hWnd, &rt);

    Screen = CreateCompatibleBitmap(hdc, rt.right, rt.bottom);

    OldBitmap = (HBITMAP)SelectObject(MemDC, Screen);

    ucpPixel = BMbuf + stpBFH->bfOffBits;

    for(uiYcount = uiY; 0 < uiYcount; --uiYcount)

    {

    for(uiXcount = 0; uiX > uiXcount; ++uiXcount)

    {

    SetPixel(MemDC, uiXcount + XOFFSET, uiYcount-1, RGB(*(ucpPixel+2), *(ucpPixel+1), *ucpPixel));

    ucpPixel = ucpPixel + 3;

    }

    ucpPixel = ucpPixel + uiPad;

    }

    SelectObject(MemDC, OldBitmap);

    DeleteDC(MemDC);

    ReleaseDC(hWnd, hdc);

    free(BMbuf);

    }

    else

    {

    MessageBox(hWnd, TEXT("파일을 열 수 없습니다."), TEXT("오류"), MB_OK);

    DestroyWindow(hWnd);

    }

    return 0;

    case WM_PAINT:

    hdc = BeginPaint(hWnd, &ps);

    MemDC = CreateCompatibleDC(hdc);

    OldBitmap = (HBITMAP)SelectObject(MemDC, Screen);


    GetClientRect(hWnd, &rt);

    BitBlt(hdc, 0, 0, rt.right, rt.bottom, MemDC, 0, 0, SRCCOPY);


    SelectObject(MemDC, OldBitmap);

    DeleteDC(MemDC);

    EndPaint(hWnd, &ps);

    return 0;

    case WM_DESTROY:

    DeleteObject(Screen);

    PostQuitMessage(0);

    return 0;

    }

    return(DefWindowProc(hWnd,iMessage,wParam,lParam));

    }



Designed by Tistory.