성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • 문자열 나누기
  • WINAPI
  • ARM Reverse Engineering
  • MFC
  • Boot Code 분석

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

2013.10.01 _API 새창띄우기
Win32 API

2013.10.01 _API 새창띄우기

2013. 10. 1. 15:39

   API   


▶ Visual Studio 프로젝트 파일 생성 순서

: New Project - Win32 - Win32 Project - Empty File - FileName.c


API WinMain Source ( 새 창 만들기 )

#include <windows.h>


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);  // 사용자와 시스템이 보내오는 메시지를 처리한다. 프로그램의 실질적인 처리를 하는 곳

HINSTANCE g_hInst;                                    


LPCTSTR lpszClass = TEXT("KKIMSSI");  // 창 제목 

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)  // WinMain , API Main 함수, Entry point

{                                                                  // nCmdShow = 인자의 갯수
  HWND hWnd;    // Window Handler                                  // LPSTR 는 char * 배열 C의 main 의 2번째 인자
  MSG Message;    
  WNDCLASS WndClass;  /* 1. 윈도우 구조체 생성 ( Class ) */
  g_hInst = hInstance;  

  /* 2.1 구조체에 값을 넣어 스타일을 변화시켜준다 */
  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;
  WndClass.lpszClassName   = lpszClass;
  WndClass.lpszMenuName   = NULL;
  WndClass.style       = CS_HREDRAW|CS_VREDRAW;
  /* 2.2 앞에 모든 Class 값을 등록시켜주는 함수 */
  RegisterClass(&WndClass);  

  /* 3. 창 만들기 */
  hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
    NULL,(HMENU)NULL,hInstance,NULL);
  /* 4. 창을 화면에 출력 하는 함수 호출*/
  ShowWindow(hWnd,nCmdShow);

  /* 5. 창에서 일어나는 메세지 처리 (클릭, 닫기 등등..) */
  while(GetMessage(&Message,NULL,0,0))   // 메시지 큐 : 시스템이나 사용자로부터 발생된 메시지가 잠시 대기하는 메시지 임시 저장 영역
  {                                       // 메시지 큐에서 메시지를 읽어 들인다 

    TranslateMessage(&Message);           // 입력메시지를 가공해서 프로그램에 쉽게 사용하도록 해준다
    DispatchMessage(&Message);            // 꺼낸 메시지를 윈도우 메시지 처리함수(WndProc)로 전달한다
  }
  return (int)Message.wParam;
}

/* 마우스나 키보드를 움직이면 OS 에서 자동으로 호출 */
/* 메세지 처리는 여기서 처리된다 */

/* 여기서 코드가 핵심 */
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
  switch(iMessage)
  {
  case WM_DESTROY:
    PostQuitMessage(0);  // 창닫기 가능
    return 0;
  case WM_LBUTTONDOWN:  // 클릭 시 Beep
    MessageBeep(0);
    return 0;

  }
  return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}


   실행순서  


실행결과



 TextOut.c

#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;

LPCTSTR lpszClass = TEXT("KKIMSSI");  // 창 제목 

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)  // WinMain , API Main 함수
{                                                    // nCmdShow = 인자의 갯수
  HWND hWnd;    // Window Handler                                  // LPSTR 는 char * 배열 C의 main 의 2번째 인자
  MSG Message;    
  WNDCLASS WndClass;  /* 1. 윈도우 구조체 생성 ( Class ) */
  g_hInst = hInstance;  

  /* 2.1 구조체에 값을 넣어 스타일을 변화시켜준다 */
  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;
  WndClass.lpszClassName   = lpszClass;
  WndClass.lpszMenuName   = NULL;
  WndClass.style       = CS_HREDRAW|CS_VREDRAW;
  /* 2.2 앞에 모든 Class 값을 등록시켜주는 함수 */
  RegisterClass(&WndClass);  

  /* 3. 창 만들기 */
  hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
    NULL,(HMENU)NULL,hInstance,NULL);
  /* 4. 창을 화면에 출력 하는 함수 */
  ShowWindow(hWnd,nCmdShow);

  /* 5. 창에서 일어나는 메세지 처리 (클릭, 닫기 등등..) */
  while(GetMessage(&Message,NULL,0,0))
  {
    TranslateMessage(&Message);
    DispatchMessage(&Message);
  }
  return (int)Message.wParam;
}

/* 마우스나 키보드를 움직이면 OS 에서 자동으로 호출 */
/* 메세지 처리는 여기서 처리된다 */
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT ps;

  switch(iMessage)
  {
    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
    //case WM_LBUTTONDOWN:
    //  hdc = GetDC(hWnd);                  /* 창의 그리기 정보를 가져온다, Device Context */ /* 인자 hWnd 는 현재 창의 정보 */
    //  TextOut(hdc,100,100,TEXT("Beautiful Korea"),15);  /* 그리기 정보 TextOut(hdc, x=100, y=100, 문자열, 문자열 갯수) */ 
                                                          /* 한글도 한 글자로 인식 */
    //  ReleaseDC(hWnd,hdc);                /* 사용했던 GetDC 를 ReleaseDC 로 다시 반환해준다 */
    //  return 0;
    case WM_PAINT:                      /* 작업영역의 일부가 지워져도 빠르게 다시 복구시킴 */
      hdc = BeginPaint(hWnd,&ps);              /* 호출이 많이 될 확률이 높으므로 BeginPaint 를 사용 */
      TextOut(hdc,100,100,TEXT("Beatiful Korea"),15);    /* WM_PAINT 안에서만 BeginPaint 사용 */
      EndPaint(hWnd,&ps);                  /* BeginPaint - EndPaint */
      return 0;
  }
  return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}



실행결과



▶ 사라지지 않아!!


저작자표시 (새창열림)

'Win32 API' 카테고리의 다른 글

2013.10.23 _ Sokoban 연습  (0) 2013.10.23
2013.10.23_ API _ Bitmap 분석해보기  (0) 2013.10.23
2013.10.14_API_Control(체크박스/라디오박스)  (0) 2013.10.14
2013.10.04 _ API 정리 자료 ( 입력/출력 부분 )  (0) 2013.10.08
2013.10.07 _ API 정리 자료 ( SendMessage , CallBack 함수 )  (0) 2013.10.08
    'Win32 API' 카테고리의 다른 글
    • 2013.10.23_ API _ Bitmap 분석해보기
    • 2013.10.14_API_Control(체크박스/라디오박스)
    • 2013.10.04 _ API 정리 자료 ( 입력/출력 부분 )
    • 2013.10.07 _ API 정리 자료 ( SendMessage , CallBack 함수 )
    성엽이
    성엽이

    티스토리툴바