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

20151120_안향진_API_7

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

<캠>


=비트맵 뷰어 만들기


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


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


BOOL CloseHandle(HANDLE hObject);



=

=7-1-가. 컨트롤의 정의

STATIC(라벨)-수정불가, 에디터, 버튼, 라디오, 리스트박스...



=7-3-가. 에디트

-윈도우는 WM_PAINT를 자체적으로 가지고 있으므로 창을 가렸다가 치우면 알아서 그려줌



7-2-라. 라디오버튼


#define ID_R1 101
#define ID_R2 102
#define ID_R3 103
#define ID_R4 104
#define ID_R5 105
#define ID_R6 106

HWND r1, r2, r3, r4, r5, r6;
int GRAPH = 0;
int COLOR = 0;

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT ps;
  HBRUSH MyBrush, OldBrush;
  
switch(iMessage) 
  {
    
case WM_CREATE:
      CreateWindow(L"button",L"Graph",WS_CHILD 
| WS_VISIBLE | 
        BS_GROUPBOX,
5,5,120,110,hWnd,(HMENU)0,g_hInst,NULL);
      CreateWindow(L"button",L"Color",WS_CHILD 
| WS_VISIBLE | 
        BS_GROUPBOX,
145,5,120,110,hWnd,(HMENU)1,g_hInst,NULL);
      r1
=CreateWindow(L"button",L"Rectangle",WS_CHILD | WS_VISIBLE | 
        BS_AUTORADIOBUTTON 
| WS_GROUP,
        
10,20,100,30,hWnd,(HMENU)ID_R1,g_hInst,NULL);
      r2
=CreateWindow(L"button",L"Ellipse",WS_CHILD | WS_VISIBLE | 
        BS_AUTORADIOBUTTON,
        
10,50,100,30,hWnd,(HMENU)ID_R2,g_hInst,NULL);
      r3
=CreateWindow(L"button",L"Line",WS_CHILD | WS_VISIBLE | 
        BS_AUTORADIOBUTTON,
        
10,80,100,30,hWnd,(HMENU)ID_R3,g_hInst,NULL);
      r4
=CreateWindow(L"button",L"Black",WS_CHILD | WS_VISIBLE | 
        BS_AUTORADIOBUTTON 
| WS_GROUP,
        
150,20,100,30,hWnd,(HMENU)ID_R4,g_hInst,NULL);
      r5
=CreateWindow(L"button",L"Red",WS_CHILD | WS_VISIBLE | 
        BS_AUTORADIOBUTTON,
        
150,50,100,30,hWnd,(HMENU)ID_R5,g_hInst,NULL);
      r6
=CreateWindow(L"button",L"Blue",WS_CHILD | WS_VISIBLE | 
        BS_AUTORADIOBUTTON,
        
150,80,100,30,hWnd,(HMENU)ID_R6,g_hInst,NULL);
      CheckRadioButton(hWnd, ID_R1, ID_R3, ID_R1);
      CheckRadioButton(hWnd, ID_R4, ID_R6, ID_R4);
      
break;
    
case WM_COMMAND:
      
if (HIWORD(wParam) == BN_CLICKED) 
      {
        
switch (LOWORD(wParam)) 
        {
          
case ID_R1:
            GRAPH
=0;
            
break;
          
case ID_R2:
            GRAPH
=1;
            
break;
          
case ID_R3:
            GRAPH
=2;
            
break;
          
case ID_R4:
            COLOR
=0;
            
break;
          
case ID_R5:
            COLOR
=1;
            
break;
          
case ID_R6:
            COLOR
=2;
            
break;
        }
        InvalidateRect(hWnd, NULL, TRUE);
      }
      
return 0;
    
case WM_PAINT:
      hdc
=BeginPaint(hWnd,&ps);
      
switch (COLOR) 
      {
        
case 0:
          MyBrush 
= CreateSolidBrush(RGB(000));
          
break;
        
case 1:
          MyBrush 
= CreateSolidBrush(RGB(25500));
          
break;
        
case 2:
          MyBrush 
= CreateSolidBrush(RGB(00255));
          
break;
      }
      OldBrush 
= (HBRUSH)SelectObject(hdc, MyBrush);
      
switch (GRAPH) 
      {
        
case 0:
          Rectangle(hdc, 
10200200300);
          
break;
        
case 1:
          Ellipse(hdc, 
10200200300);
          
break;
        
case 2:
          MoveToEx(hdc, 
10200, NULL);
          LineTo(hdc, 
200300);
          
break;
      }
      SelectObject(hdc, OldBrush);
      DeleteObject(MyBrush);
      EndPaint(hWnd, 
&ps);
      
return 0;
    
case WM_DESTROY:
      PostQuitMessage(
0);
      
return 0;
  }
  
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}





=7-2-나. Check

#define ID_EDIT 100
HWND hEdit;
WCHAR str[
128];

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) 
// 어플리케이션 핵심 실제 메인 
{
  HDC hdc;
  PAINTSTRUCT ps;

  
switch (iMessage)
  {
  
case WM_CREATE:
    hEdit 
= CreateWindow(L"edit", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
      ES_AUTOHSCROLL, 
1020020025, hWnd, (HMENU)ID_EDIT, g_hInst, NULL);
    
return 0;
  
case WM_COMMAND:
    
switch (LOWORD(wParam))
    {
    
case ID_EDIT:
      
switch (HIWORD(wParam))
      {
      
case EN_CHANGE:
        GetWindowText(hEdit, str, 
128);

        SetWindowText(hWnd, str);
      }
    }
    
return 0;
  
case WM_DESTROY:
    PostQuitMessage(
0);
    
return 0;
  }

  
return(DefWindowProc(hWnd, iMessage, wParam, lParam)); // DESTROY이외 처리는 윈도로 보냄 
}




=7-1-나. Button

 7-5-나. 스태틱

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) // 어플리케이션 핵심 실제 메인 
{
  HDC hdc;
  PAINTSTRUCT ps;

  
switch (iMessage)
  {
  
case WM_CREATE:
    CreateWindow(L"button", L"Click Me", WS_CHILD 
| WS_VISIBLE | BS_PUSHBUTTON,
      
208010025, hWnd, (HMENU)0, g_hInst, NULL);
    CreateWindow(L"button", L"Me Two", WS_CHILD 
| WS_VISIBLE | BS_PUSHBUTTON,
      
205010025, hWnd, (HMENU)1, g_hInst, NULL);
    CreateWindow(L"
static", L"Only Text", WS_CHILD | WS_VISIBLE,
      
202010025, hWnd, (HMENU)-1, g_hInst, NULL);
    
return 0;
  
case WM_COMMAND:
    
switch (LOWORD(wParam))
    {
      
case 0:
        MessageBox(hWnd, L"First Button Clicked", L"Button", MB_OK);
        
break;
      
case 1:
        MessageBox(hWnd, L"Second Button Clicked", L"Button", MB_OK);
        
break;
    }
    
return 0;
  
case WM_DESTROY:
    PostQuitMessage(
0);
    
return 0;
  }

  
return(DefWindowProc(hWnd, iMessage, wParam, lParam)); // DESTROY이외 처리는 윈도로 보냄 


=비트맵 헤더 정보 출력

#include <windows.h>

#define
  XPOS  20
#define
 YPOS  20
#define
 SWIDTH  140
#define
 SHEIGHT 25
#define
 YGAP  5
#define
 XGAP  10

typedef
 struct _msgmap
{
  UINT uiMsg;
  LRESULT(*fp)(WPARAM, LPARAM);
}stMsgmap;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT OnDestroy( WPARAM, LPARAM);
LRESULT OnCreate( WPARAM, LPARAM);
LRESULT OnPaint( WPARAM, LPARAM);

stMsgmap Msgmap[] 
= {
  { WM_PAINT, OnPaint },
  { WM_DESTROY, OnDestroy },
  { WM_CREATE, OnCreate },
  { WM_NULL, 
0 }
};



HINSTANCE g_hInst;  
HWND hWnd;
LPSTR lpszClass 
= L"Viewer"; 
UCHAR *ucpData;


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_CAPTION 
| WS_SYSMENU | WS_OVERLAPPED | WS_THICKFRAME /*| WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VSCROLL | WS_HSCROLL*/),
    CW_USEDEFAULT, CW_USEDEFAULT, 
300300
    NULL, (HMENU)NULL, hInstance, NULL
    );
  ShowWindow(hWnd, nCmdShow); 

  
while (GetMessage(&Message, 000)) { 
    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 OnPaint(WPARAM wParam, LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT ps;

  hdc 
= BeginPaint(hWnd, &ps);

  EndPaint(hWnd, 
&ps);
  
return 0;
}

LRESULT OnDestroy(WPARAM wParam, LPARAM lParam)
{  
  PostQuitMessage(
0);
  
return 0;
}

void
 PrintBmpInfo(BITMAPFILEHEADER *stpFH, BITMAPINFOHEADER *stpIH)
{
  UINT uiYCnt;
  HWND hHandle[
13];
  WCHAR *ucTitle[] 
= {
    L"Magic Number  :
", 
    L"
파일크기  :",
    L"
데이터 오프셋  :",
    L"
Info 헤더사이즈  :",
    L"
가로    :",
    L"
세로    :",
    L"
비트 플레인  :",
    L"
픽셀당 비트  :",
    L"
압축 유형  :",
    L"
데이터 크기  :",
    L"
수평 해상도  :",
    L"
수직 해상도  :",
    L"
칼라인덱스 수  :"
  };
  WCHAR wStr[20] 
= { 0, };

  uiYCnt 
= 0;
  for (uiYCnt 
= 0; uiYCnt < 13; ++uiYCnt)
  {  
    CreateWindow(L"
static", ucTitle[uiYCnt], WS_CHILD | WS_VISIBLE,
      XPOS, YPOS + ((SHEIGHT + YGAP)*uiYCnt), SWIDTH, SHEIGHT, hWnd, (HMENU)-
1, g_hInst, NULL);

    
    
    hHandle[uiYCnt] 
= CreateWindow(L"edit", L"TEST", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_READONLY,
      XPOS + SWIDTH + XGAP, YPOS + ((SHEIGHT + YGAP)*uiYCnt), SWIDTH, SHEIGHT, hWnd, (HMENU)-
1, g_hInst, NULL);

  }
  
//wsprintf
  
//SetWindowText(hHandle[0], L"TEST2");
}


LRESULT OnCreate(WPARAM wParam, LPARAM lParam)
{
  HDC hdc;
  HANDLE hFile;

  BITMAPFILEHEADER stBFHead;
  BITMAPINFOHEADER stBFInfo;
  BOOL bRet;
  DWORD dwCnt;

  hFile 
= CreateFile(L"1.bmp", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  
if (INVALID_HANDLE_VALUE == hFile)
  {
    MessageBox(hWnd, L"Open Error", L"ERROR", MB_OK);
    PostQuitMessage(
0);
    
return 0;
  }

  bRet 
= ReadFile(hFile, &stBFHead, sizeof(BITMAPFILEHEADER), &dwCnt, NULL);
  
if (FALSE == bRet)
  {
    CloseHandle(hFile);
    
return 0;
  }

  bRet 
= ReadFile(hFile, &stBFInfo, sizeof(BITMAPINFOHEADER), &dwCnt, NULL);
  
if (FALSE == bRet)
  {
    CloseHandle(hFile);
    
return 0;
  }
  PrintBmpInfo(
&stBFHead, &stBFInfo);

  CloseHandle(hFile);
  
return 0;
}




728x90