본문 바로가기
코스웨어/15년 스마트컨트롤러

20151120 - 주재민 - WinAPI 7일차

by 알 수 없는 사용자 2015. 11. 20.
728x90
반응형

WinAPI

레퍼런스

CreateFile

원형 : HANDLE CreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES pSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);

이 함수는 파일을 생성하는 가장 기본적인 함수이다.

 그러나 이름과는 달리 파일을 생성하는 것뿐만 아니라 기존의 파일을 열 수도 있으며 파일 외에 다음과 같은 오브젝트를 생성하거나 열 수도 있다.

이 함수로 생성한 핸들은 반드시 CloseHandle로 닫아 주어야 한다.

 

ReadFile

원형 : BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);

파일로부터 데이터를 읽는다.

주로 동기적인 입력에 사용하므로 데이터를 완전히 읽기 전에는 리턴하지 않는다.

 

#include <windows.h>
#include "smart.h"

LRESULT On_Create(WPARAM, LPARAM);
LRESULT On_Destroy(WPARAM, LPARAM);
LRESULT On_Paint(WPARAM, LPARAM);


stMsgMap MsgMap[] = {
 { WM_PAINT, On_Paint },
 { WM_DESTROY, On_Destroy },
 { WM_CREATE, On_Create },
 { WM_NULL, 0 }
};

UCHAR    *ucpData;

void PrintBmpInfo(BITMAPFILEHEADER *stfh, BITMAPINFOHEADER *stih);

LRESULT    CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE  g_hInst;
LPSTR    lpszClass = TEXT("Camera");

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
 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)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, 0, 0, 0))
 {
  TranslateMessage(&Message);
  DispatchMessage(&Message);
 }
 return Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWpWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
 stMsgMap *stpMap = MsgMap;
 hWnd = hWpWnd;
 while (WM_NULL != (*stpMap).uiMsg)
 {
  if (iMessage == (*stpMap).uiMsg)
  {
   return (((*stpMap).FP)(wParam, lParam));
  }
  ++stpMap;
 }
 return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

LRESULT On_Create(WPARAM wParam, LPARAM lParam)
{
 HDC hdc;
 HANDLE hFile;
 BITMAPFILEHEADER stBFHead;
 BITMAPINFOHEADER stBFInfo;
 BOOL  bRet;
 DWORD  dwCnt;

 hFile = CreateFile(TEXT("1.bmp"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 if (INVALID_HANDLE_VALUE == hFile)
 {
  MessageBox(hWnd, TEXT("CreateFile에 실패했습니다."), TEXT("Error."), MB_OK);
  PostQuitMessage(0);
  return 0;
 }

 bRet = ReadFile(hFile, &stBFHead, sizeof(stBFHead), &dwCnt, NULL);
 if (FALSE == bRet)
 {
  MessageBox(hWnd, TEXT("stBFHead구조체 ReadFile에 실패했습니다."), TEXT("Error."), MB_OK);
  CloseHandle(hFile);
  PostQuitMessage(0);
 }

 bRet = ReadFile(hFile, &stBFInfo, sizeof(stBFInfo), &dwCnt, NULL);
 if (FALSE == bRet)
 {
  MessageBox(hWnd, TEXT("stBFInfo구조체 ReadFile에 실패했습니다."), TEXT("Error."), MB_OK);
  CloseHandle(hFile);
  PostQuitMessage(0);
 }

 PrintBmpInfo(&stBFHead, &stBFInfo);

 CloseHandle(hFile);

 return 0;
}

LRESULT On_Paint(WPARAM wParam, LPARAM lParam)
{
 PAINTSTRUCT ps;

 BeginPaint(hWnd, &ps);
 EndPaint(hWnd, &ps);

 return 0;
}

LRESULT On_Destroy(WPARAM wParam, LPARAM lParam)
{
 PostQuitMessage(0);

 return 0;
}

void PrintBmpInfo(BITMAPFILEHEADER *stfh, BITMAPINFOHEADER *stih)
{
 HWND hEdit;
 int ycnt;
 UCHAR *ucTitle[2] = { TEXT("Magic Number"), TEXT("File Size") };
 
 for (ycnt = 0; ycnt < 2; ycnt++)
 {
  CreateWindow(TEXT("static"), TEXT("Magic Number"), WS_CHILD | WS_VISIBLE,
   XPOS, YPOS*(ycnt + 1) + YGAP*ycnt, SW, SH, hWnd, (HMENU)-1, g_hInst, NULL);
  hEdit = CreateWindow("edit", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
   ES_AUTOHSCROLL, XPOS, YPOS, 200, 25, hWnd, (HMENU)ID_EDIT, g_hInst, NULL);


 }


 
 CreateWindow(TEXT("static2"), TEXT("File Size"), WS_CHILD | WS_VISIBLE,
  XPOS, YPOS*2, SW, SH, hWnd, (HMENU)-1, g_hInst, NULL);
 return;
}

 

#ifndef __SMART_H__
#define __SMART_H__

#define  XPOS  20
#define  YPOS  20
#define  SH    25
#define  SW    100
#define  YGAP  5
#define  XGAP  10
#define ID_EDIT 100
HWND hWnd;

typedef struct _stMsgMap
{
 UINT uiMsg;
 LRESULT(*FP)(WPARAM, LPARAM);
}stMsgMap;

 

#endif //__SMART_H__

728x90