#include <windows.h>
#include "smart.h"
#define XPOS 20
#define YPOS 20
#define SWIDTH 190
#define SHEIGHT 25
#define YGAP 5
#define XGAP 10
LRESULT OnCreate(WPARAM wParam, LPARAM lParam);
LRESULT OnPaint(WPARAM wParam, LPARAM lParam);
LRESULT OnDestroy(WPARAM wParam, LPARAM lParam);
void PrintBmpInfo(BITMAPFILEHEADER* stpFH, BITMAPINFOHEADER*stpIH);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
stMsgMap MsgMap[] = {
{ WM_PAINT, OnPaint },
{ WM_CREATE, OnCreate },
{ WM_DESTROY, OnDestroy },
{ WM_NULL, 0 },
};
unsigned char * ucpData;
HWND hWnd;
HINSTANCE g_hInst;
LPSTR lpszClass = "First";
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;
//message map 기법을 통해서 switch case 문을 지우고 while문이 모든 함수를 처리한다.
while (WM_NULL != (*stpMap).uiMsg)
{
if (iMessage == (*stpMap).uiMsg)
{
//내부적으로 처리하기 때문에 와일문이 돌면 안되기 때문에 return으로 처리한다.
return (((*stpMap).fp)(wParam, lParam));
}
++stpMap;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
LRESULT OnCreate(WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HANDLE hFile;
BOOL bRet;
BITMAPFILEHEADER stBFHead;
BITMAPINFOHEADER stBfInfo;
DWORD dwCount;
hFile = CreateFile("1.bmp", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE==hFile)
{
MessageBox(hWnd, "파일을 열수 없습니다.", "알림", MB_OK);
//파일 열때 실패하면 아무것도 안하고 종료해야하기 때문에 디스트로이를 안쓰고 바로 종료한다
PostQuitMessage(0);
return 0;
}
//읽어들인 데이터를 인자로 반환한다
bRet = ReadFile(hFile, &stBFHead, sizeof(BITMAPFILEHEADER), &dwCount, NULL);
if (FALSE ==bRet)
{
MessageBox(hWnd,"stBFHead구조체 ReadFile에 실패했습니다.", "Error.", MB_OK);
CloseHandle(hFile);
PostQuitMessage(0);
return 0;
}
bRet = ReadFile(hFile, &stBfInfo, sizeof(BITMAPINFOHEADER), &dwCount, NULL);
if (FALSE == bRet)
{
MessageBox(hWnd, "stBfInfo구조체 ReadFile에 실패했습니다.", "Error.", MB_OK);
CloseHandle(hFile);
PostQuitMessage(0);
return 0;
}
PrintBmpInfo(&stBFHead, &stBfInfo);
CloseHandle(hFile);
return 0;
}
LRESULT OnPaint(WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
return 0;
}
LRESULT OnDestroy(WPARAM wParam, LPARAM lParam)
{
PostQuitMessage(0);
return 0;
}
void PrintBmpInfo(BITMAPFILEHEADER* stpFH, BITMAPINFOHEADER* stpIH)
{
int iCntY;
PCHAR ucTitle[15] =
{
"Magic Number",
"Size of File",
"Data Position",
"Size of BITMAPINFOHEADER",
"Width of Image",
"Height of Image",
"Bit Plane number",
"Bit Count",
"Compression",
"Size of Image",
"Resolution of Width",
"Resolution of Height",
"Number of Used Color",
"Index of Important Color"
};
for (iCntY = 0; iCntY < 14; ++iCntY)
{
CreateWindow(TEXT("static")
, ucTitle[iCntY]
, WS_CHILD | WS_VISIBLE
, XPOS
, YPOS*(iCntY + 1) + (YGAP*iCntY)
, SWIDTH
, SHEIGHT
, hWnd
, (HMENU)-1
, g_hInst
, NULL);
CreateWindow(TEXT("edit")
, TEXT("test")
, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY
, XPOS + SWIDTH + XGAP
, YPOS*(iCntY + 1) + (YGAP*iCntY)
, SWIDTH
, SHEIGHT
, hWnd
, (HMENU)-1
, g_hInst
, NULL);
}
return;
}
큰 특이점 없고 create window를 사용해서 static과 edit사용법만 익히면 됨
실행화면
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151123 수업 / WinAPI_8 비트맵 이미지 출력 - 남수진 (6) | 2015.11.23 |
---|---|
20151123_박서연_일일업무일지_WinAPI(8) (6) | 2015.11.23 |
20151123-김재홍-win32API_8일차 (3) | 2015.11.23 |
printbmp함수 (4) | 2015.11.23 |
20151120 윤재희 #7. WIN32API BMP뷰어 (5) | 2015.11.22 |
20151120 - WinAPI 일지 엄민웅 (에디트 스태틱) (5) | 2015.11.22 |
20151120 임현수 업무일지 WIN32API #7 비트맵 정보 출력 (5) | 2015.11.22 |
2015.11.20_개인업무일지_[Win32API #7]_이량경_윈도우 비트맵 뷰어 (3) | 2015.11.22 |