LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
LONG h,w;
HDC hdc, memdc;
int fd, x, y, z;
PAINTSTRUCT ps;
OPENFILENAME OFN;
TCHAR str[300];
TCHAR buffer[300];
TCHAR dummy[3];
TCHAR lpstrFile[MAX_PATH] = \"\";
BITHEADER BitHeadr;
BITINFOHEADER BitInfo;
COLORREF color = RGB(0, 0, 0);
static HBITMAP hBitmap;
switch(iMessage)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_FILEOPEN:
memset(&OFN, 0, sizeof(OPENFILENAME));
OFN.lStructSize = sizeof(OPENFILENAME);
OFN.hwndOwner = hWnd;
OFN.lpstrFilter = TEXT(\"모든 파일(*.*)\\0*.*\\0비트맵(*.bmp)\\0*.bmp\\0JPG(*.jpg)\\0*.jpg\\0\");
OFN.lpstrFile = lpstrFile;
OFN.nMaxFile = MAX_PATH;
if(GetOpenFileName(&OFN) == 0)
{
return 0;
}
fd = open(OFN.lpstrFile, O_RDONLY);
read(fd, buffer, sizeof(BitHeadr));
memcpy(&BitHeadr, buffer, sizeof(BitHeadr));
lseek(fd, 0, SEEK_CUR);
read(fd, buffer, sizeof(BitInfo));
memcpy(&BitInfo, buffer, sizeof(BitInfo));
lseek(fd, BitHeadr.bfOffset, SEEK_SET); //비트맵 데이터 시작지점으로 이동
break;
case WM_PAINT:
hdc = GetDC(hWnd);
if((BitInfo.biWidth%4) == 0)
{
for(y = BitInfo.biHeight; y >0; y--)
{
for(x = 0; x < BitInfo.biWidth; x++)
{
read(fd, buffer, 3);
color = RGB(buffer[2], buffer[1], buffer[0]);
SetPixel(hdc, x, y, color);
lseek(fd, 0, SEEK_CUR);
}
}
}
}
WM_COMMAND:
여기서 출력하는부분만 분리해보려고 저렇게 빼놨는데
아무것도 반응이 없거든. 커맨드내에 저거 넣어놓으면 출력은 됨.
저것만 해결하면 크기조절도 가능할듯싶은데 출력하는 부분을 case ID_FILEOPEN 이 케이스문이랑 분리시키고싶은데
좀 알려줘
fd = open(OFN.lpstrFile, O_RDONLY);
read(fd, buffer, sizeof(BitHeadr));
memcpy(&BitHeadr, buffer, sizeof(BitHeadr));
lseek(fd, 0, SEEK_CUR);
read(fd, buffer, sizeof(BitInfo));
memcpy(&BitInfo, buffer, sizeof(BitInfo));
lseek(fd, BitHeadr.bfOffset, SEEK_SET);
이부분이 그림파일열면 정보가 저장되는 부분아니야?
댓글 0