728x90

 

 

메세지

키보드 입력등 이벤트가 발생할 때 발생하는 양의 정수값

 

인스턴스(Instance)

메모리 에 로드되어 실행된 프로그램을 운영체제가 확인하기 위해 할당하는 양의 정수값

 

핸들(handle)

핸들은 운영체제의 자원을 사용하거나 윈도우를 생성할 때 운영체제로부터 할당되는 양의 정수값

HWND, HDC, HPEN, HBRUSH, HBITMAP -> void * 형 즉 메모리 주소값 , 모두 4byte임

 

프로젝트 생성 시 주의 할 점

메뉴 프로젝특(P) / 프로젝트이름 속성 페이지 / 구성 속성 /일반 / 문자집합 / 멀티바이트 문자 집합 사용 설정해 줌

ANSI 문자 집합 설정

유니코드 2 byte를 기준

 

프로그램 형식의 변화

 

▶c 언어

main()

 

▶Win32 API

WinMain()

WinProc()

 

1. WinMain의 역할

WinMain()

{

윈도우 속성 설정 및 등록

윈도우 생성과 출력

메시지 루프

}

 

2. 윈도우 프로시져 함수인 WndProc()의 역할 WinMain의 역할

 

WndProc() -> 콜백(CallBack) 함수

역할 -> 메시지 처리

 

WndProc()

{

switch(message) //message 는 unsiged int 형이다.(양의 정수)

case 메시지1:

break;

------------

default:

DefWindProc();

}

 

3. Win32 API 프로그램의 기본 코드

 

WinMain() 함수의 매개변수

win32 API 프로그램 작성 순서 (6단계)

 

☆ visual C++ 6.0 과 visual Studio 2010 소스 코드가 둘 다 표현 형식이 다를 뿐 같은 코드이다.

VB 2010에서  컴파일 하게되면 VB 6.0 형태로 바뀌어서 컴파일 되므로 6.0형태로 소스를 작성한다. 

 

 툴

  형식

 Visual C++ 6.0

 int WINAPI WinMain(HINSTANCE hInstance,

                                  HINSTANCE hPrevInstance,

                                  LPSTR lpszCmdParam,

                                  int nCmdShow)

 ☞ WinDef.h에 #define WINAPI   __stdcall로 정의 됨

 Visual Studio 2008

 Visual Studio 2010

 int APIENTRY _tWinMain(HINSTANCE hInstance,

                                  HINSTANCE hPrevInstance,

                                  LPTSTR lpszCmdParam,

                                  int nCmdShow)

 ☞ WinDef.h에 #define APIENTRY WINAPI로  정의 됨

 

 

윈도우 데이형 -> MSDN 참조사이트(msdn.microsoft.com)

http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx

라이브러리 툴바에서 클릭 후 찾기에 windows data type 검색하면 윈도우즈 data type에 대해서 형식이 나옴

 

visual stdio 2008, 2010 은 유니코드 형태 이고 visual stdio 6.0 은 ANSI형이라 형변환이 필요하다.  

우리가 쓰는 코드형태는 ANSI형으로 코딩한다.

 

 데이터형

 정의

 LPSTR

 typedef char CHAR;

 typedef CHAR *LPSTR

 LPTSTR

 #ifdef UNICOOE 유니 코드이면  LPWSTR 로

   typedef LPWSTR LPTSTR;

 #else ANCI 형이면 LPSTR 로 정의 

  typedef LPSTR LPTSTR;

 #endif

 

 

WinMain()과 main() 소스 비교

 

 main()

 #include <stdio.h>

//main의 기본 형식은 아래와 같으나  사용하지 않으므로 일반적으로 int main(void)로 쓴다.

int main(int argc, char *argv[], char *envp[])

{

   return 0;

}

 WinMain()

 #include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,

                             HINSTANCE hPrevInstance,

                             LPSTR lpCmdLine,

                             int nCmdShow )

{

      return 0;

}

 

 

 

4 변수 명명법 

접두어

  원래말

 의미

 cb

 Count of Bytes

 바이트 수

 dw

 Double word

 부호없는 long형 정수

 h

 handle

 윈도우, 비트맵, 파일 등의 핸들

 sz

 Null Terminated

 NULL 종료 문자열

 ch

 Character

 문자형

 a

 Array

 배열

 w

 Word

 부호없는 정수형

 i

 Integer

 정수형

 p.lp

 Long pointer

 포인터형

 b  Bool  놀리형

 

 데이터형 

 의미

 BYTE

 unsigned char형

 CHAR

 char형

 WORD

 unsigned short형

 DWORD

 unsigned long형

 LONG

 long 과 동일

 BOOL

 정수형이며 TRUE,FALSE 중 한 값을 가진다

☞ 기존 데이터형으로 조합이 가능한 형을 새로운 데이터혀응로 정의하여 사용하는 이유

첫째 윈도우즈가 항상 인텔 기반의 IBM 컴퓨터에서만 실행되라는 법은 없으며 언젠가는 다른 시스템으로 이식될 가능성도

       있는데 그럴 경우 소스 차원의 이식성을 확보하기 위함

둘째 현재 WORD형이 현재 2바이트의 부호없는 정수형이지만 팬티엄 이유 989이나 1286쯤에는 4바이트로 확장될지도 모름

셋째 유니코드 환경에서는 문자형의 크기가 달라질 수도 있고 64비트나 128비트 환경에서는 정수형의 길이가 바뀔 수도