-
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));
}
'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글
20140930 (C++ 함수 오버로딩, 평활화 최종) (0) 2014.09.30 20140929 (C++ cout, cin, winapi로 영상 평활화 처리) (0) 2014.09.29 20140924 (비트맵 파일 구조) (0) 2014.09.25 20140827 (메시지 맵, strrev, strupr, toupper, strlwr, tolower, strchr, strstr, strtol, strtoul, strod) (0) 2014.08.27 20140826 (작성 중인 프로그램) (0) 2014.08.26