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

20151112_안향진_API_01

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

==========================================================================================

API

==========================================================================================

=API의 기본형





<main.c>

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
// LEFT RESULT:long(4byte) (반환값) CALLBACK:뒤에서 호출(운영체제가 이 함수를 호출함) => 어셈블리 단에서는 X
// 이함수의 호출 방식 : cdecl std인지 (지워도 동작)
// 16bit 시절 word : 2bytes long : 4bytes
//HWND: int H: 핸들러

HINSTANCE g_hInst;  // g:gloval
LPSTR lpszClass = L"First"; // lp: long pointer s:string z:마지막 null => char pointer // 제목이 깨질 경우 L 

// APIENTRY : entry point 
=> 컴파일 시 사라짐 (cdecl std인지 알려줌)
int
 APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance/*예전 사용 흔적*/
  , LPSTR lpszCmdParam, 
int nCmdShow)
  
//notepad A.TXT(인자 A.TXT)  // 보여줄지 안보여줄지 
{
  HWND hWnd;
  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, 
// 창 제목 "First"
    WS_OVERLAPPEDWINDOW, // 스타일 (기본 형 )
    CW_USEDEFAULT, // 가로, 세로 시작 점  => 좌표 네개 필요 
    CW_USEDEFAULT,
    CW_USEDEFAULT, 
// 가로 사이즈
    CW_USEDEFAULT, // 세로 사이즈 
    NULL, // 부모 윈도우가 있을 경우 부모 윈도우의 핸들을 지정
    (HMENU)NULL, 
// 인수로 지정된 메뉴는 현재 CreateWindow 함수로 만들어지는 윈도우에서만 사용
    hInstance, 
// 윈도우를 만드는 주체, 즉 프로그램의 핸들
    NULL 
// CREATESTRUCT라는 구조체의 번지
    );
  ShowWindow(hWnd, nCmdShow); 
// 화면에 보일지 안보일지 셋팅 하는 함수 

  while (GetMessage(&Message, 000)) { // 윈도우가 보내는 메시지를 받는 함수 (메시지 큐에서 제일 오래된 것을 들고옴 - 원형 연결리스트 )
    // 창 닫으면 GetMessage는 0을 반환 => while문 종료 
    TranslateMessage(&Message); // 키보드
    DispatchMessage(&Message); // 위도우가 할 것은 끝났다 => 어플리케이션 WndProc를 불러다오  
  }
  
return Message.wParam; // 정상종료인지 비정상 종료인지 반환 - 윈도우 로그에 남을 것임 
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) 
// 어플리케이션 핵심 실제 메인 
{
  
switch (iMessage) { // 메시지 번호가 인자
  case WM_DESTROY: // WM : Window Message
    PostQuitMessage(0);
    
return 0;
  }
  
return(DefWindowProc(hWnd, iMessage, wParam, lParam)); // DESTROY이외 처리는 윈도로 보냄 
}

=결과


=운영체제가 창에 커서가 올라가면 메시지를 보내줌

말 메시지





모달리스( 메모장 - ctrl+F / ctrl+S )

-뒤가 클릭되는 것



-뒤가 클릭되지 않는 것



















2-2-나. 윈도우 클래스

CreateWindow()




=원형큐모양의 메시지 큐는 처리못해도 최신메시지로 덮어씀


FIFO ( First In First Out)


=반드시 메시지를 모두 처리하는 것 RTOS (특수용)

-아닌 것 보통 OS (범용)








참조 : http://www.soen.kr/

728x90