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__
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151120 - WinAPI 일지 엄민웅 (에디트 스태틱) (5) | 2015.11.22 |
---|---|
20151120 임현수 업무일지 WIN32API #7 비트맵 정보 출력 (5) | 2015.11.22 |
2015.11.20_개인업무일지_[Win32API #7]_이량경_윈도우 비트맵 뷰어 (3) | 2015.11.22 |
20151120_안향진_API_7 (5) | 2015.11.22 |
20151120 - 강동조 개인업무일지 API/윈도우비트맵 (4) | 2015.11.20 |
20151120 - 홍준모 업무일지 (WinAPI이용 영상 처리) (4) | 2015.11.20 |
20151120 수업 WinAPI_7 / 비트맵 뷰어 만들기 - 남수진 (3) | 2015.11.20 |
20151120-김재홍-win32API-7일차 (2) | 2015.11.20 |