728x90

RX TX 문자열 전송 예제

 

SerialTest.zip

728x90

1. Resource(리소스)의 종류

커서(cursor)

메뉴(menu)

아이콘(icon)

비트맵(bitmap)

문자열(string)

엑셀레이터(accelerator) : 단축키

다이얼로그(dialog)

 

리소스 파일 생성

리소스 파일 확장자: *.rc

 

2. 리소스와 프로그래밍

 

리소스 -> 전처리기 지시어(#define)에 의해 정의된 고유값(양의 정수)

 

3. 아이콘(icon)

 아이콘 크기와 색상

 

16x16, 32x32, 48x48

16색(4비트), 256색(8비트) 트루컬러(32비트)

 

3.2 아이콘 로딩  및 적용

 첫째: 솔루션 탐색기/리소스 파일/ 추가/리소스/아이콘

         아이콘 그리고 저장

 둘째: resource.h 헤더 파일 포함

#include "resource.h"

 셋째: WndClass 등록

WndClass.hIcon=LoadIcon(hInstance,MAKEINTRSOURCE(IDI_ICON1);

WndClass.hIconSm=LoadIcon(hInstance,MAKEINTRSOURCE(IDI_ICON1);

-resource.h 헤더 파일 포함

-LoadIcon()

 

HICON LoadIcon(

HINSTANCE hInstance,

LPCTSTR lpIconName

);

LPTSTR MAKEINTRESOURCE(

WORD wInteger

);

 

 

LoadIcon(hInstance, MAKERESOURCE(IDI_ICON1))

 

WNDCLASSE 등록

 

 

 

 

728x90

메시지 보내기

운영체제의 메시지 큐를 거치는지 여부에 따른 메시지를

큐 메시지(Queued Messages)와 넌 큐 메시지(Nonqueued Messages)

 

큐 메시지(Queued Messages): 운영체제 거침

BOOL WINAPI PostMessage(

HWND hWnd,

UINT Msg,

WPARAM wParam,

LPARAM lParam 

 

);

 

 

넌 큐 메시지(Nonqueued Messages): 급한 메시지 메시지 큐를 거치지 않고 바로 보내는 것

여러개의 윈도우가 있을때 어떠한 data를 보내고 싶을 때

윈도우 핸들을 알면 가능해 진다.

 예)SendMessage

LRESULT WINAPI SendMessage(

HWND hWnd,

UINT Msg,

WPARAM wParam,

LPARAM lParam

); 

 

 

'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글

WINAPI 시리얼 통신 예제 소스  (0) 2014.10.27
Resource(리소스)  (0) 2014.10.22
Win32 API 프로그램 작성 순서 6단계  (0) 2014.10.21
Win32 API 기초정리  (0) 2014.10.20
▶Win32 API 주요 함수  (0) 2014.10.17
728x90

 Win32 API 프로그램의 작성 순서 6단계

 

1단계 : 윈도우 클래스 구조체

2단계 : 윈도우 구조체 등록

3단계 : 윈도우 생성

4단계 : 윈도우 출력

5단계 : 메시지 루프

6단게 : 메시지 처리 함수인 WndProc()의 작성

 

1단계 : 윈도우 클래스 구조체 

 

2단계 : 윈도우 구조체 등록 

 원형

 ATOM RegisterClassEx(__in CONST WNDCLASSEX *lpwcx

 설정

 RegisterClass(&WndClass);

 

3단계 : 윈도우 생성

윈도우를 생성하고 윈도우 핸들(HWND)을 받는 단계

HWND CreateWindow(     LPCTSTR lpClassName,     //  등록한 구조체 이름                                                   

LPCTSTR lpWindowName, // 메뉴위 타이틀 이름

DWORD dwStyle,       //윈도우 창 모양(윈도가 가지는 모든 모양)     
int x,                    //윈도우 화면 시작좌표 x

int y,                    //윈도우 화면 시작좌표 y

int nWidth,            //윈도우 가로 사이즈

int nHeight,            //윈도우 세로 사이즈
HWND hWndParent, //차일드 윈도일때 부모 윈도우 명시

HMENU hMenu,            //메뉴

HINSTANCE hInstance, //프로그램 자체를 일컫는 정수값=자기 자신을 가리키는 1인칭 대명사

LPVOID lpParam                 // 사용하지 않는 부분 0의 값입력                       

);

 

 

4단계 : 윈도우 출력

BOOL ShowWindow(HWND hWnd, nCmdShow); // nCmdShow 는 함수가 리턴한 핸들을 그대로 넘김

/*

SW_HIDE 윈도우를 숨긴다.

SW_MINIMIZE 윈도우를 최소화하고 활성화시키지 않는다.

SW_RESTORE 윈도우를 활성화시킨다.

SW_SHOW 윈도우를 활성화하여 보여준다.

SW_SHOWNORMAL 윈도우를 활성화하여 보여준다.

*/

 

BOOL UpdateWindow(HWMD hWnd);

 

5단계 : 메시지 루프

BOOL GETMESSAGE(

LPMSG lpMsg,        //아래 MSG 포인터 구조체 참고

HWMD hWnd,            //핸들

UINT wMsgFilterMin,    //받고자 하는 메세지 범위 보통 0 모든 메세지를 받겠다는 뜻

UINT wMsgFilterMax    //받고자 하는 메세지 범위 보통 0 모든 메세지를 받겠다는 뜻

);

 

BOOL TranslateMessage(                // 키입력 메세지 처리

const MSG *lpMsg

);

 

LRESULT DispatchMessage(            // 메세지가 발생한것을 처리해 달라고 WinProc 함로 넘김

const MSG *lpmsg

); 

 

typedef struct{

HWND     hwnd;

UINT      message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

}MSG, *PMSG;

 

6단계 : 윈도우 메시지 처리 함수인 WindProc()의 작성

 

윈도우 메시지 (WinUser.h)

#define WM_SETFOCUS

#define WM_KILLFOCUS

#define WM_ENABLE

#define WM_SETREDRAW

#define WM_SETTEXT

#define WM_GETTEXT

#define WM_GETTEXTLENGTH

#define WM_PAINT

#define WM_CLOSE

 

WndProc() 함수의 기본구조

LRESULT CALLBACK WndProc(HWND hWnd,    

UINT iMessage,

WPARAM wParam,

LPARAM lParam)

 

HWND     // void *형

typedef LONG_PTR LRESULT;     // long 형

typedef long LONG_PTR;            //

typedef LONG_PTR LPARAM;    // long 형

typedef UINT_PTR WPARAM;    // unsigned int 형

typedef unsigned int UINT_PTR;    //

 

WndProc() 함수의 기본예제

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
  switch
 (iMessage) {
  case
 WM_DESTROY:
       PostQuitMessage(0); // WinMain 함수를 빠져 나오는 메시지

break;

default:

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

  }
}return 0;

 

 ☞ 중용한 윈도우 메시지

 메시지

                   설 명

 WM_CREATE

 CreateWindow() 또는 CreateWindowEx() 함수에 의해 윈도우가 생성 되었을때 발생 하는 메시지

 WM_SIZE

 사용자가 윈도우의 크기를 변경한 후에 발생되는 메시지

 WM_MOVE

 사용자가 우니도우를 이동시킨 우에 발생되는 메시지

 WM_PAINT

 윈도우의 클라이언트 영역의 일부를 새로이 그려야 하는 경우에 발생

 WM_CHAR

 문자키(알파벳과 술자키)가 눌렸을 때 발생되는 메시지 통해 대소문자 구분

 WM_KEYDOWN

 키보드가 눌렸을 때 발생하는 메시지

 

 WM_DESTROY

 윈도우가 화면으로부터 사라지고 메모리에서 해제되기 직전에 발생되는 메시지 이다

 WM_MOUSEMOVE

 마우스가 이동하면 계속 발생되는 메시지

 WM_LBUTTONDOWN

 마우스의 왼쪽 버튼이 눌렸을 때 발생되는 메시지.

 단 마우스의 커서는 윈도우의 클라이언트 영역안에 있어야 한다.

 WM_CLOSE

 윈도우가 종료될 때 발생하는 메시지로 '닫기' 버튼을 클릭하면 발생된 메시지 보다

 WM_DESTROY 메시지 보다 이전에 발생되는 메시지이다.

 WM_QUIT

 응용 프로그램을 종료할 때 발생되는 메시지로 PostQuitMessage() 함수에 의해 발생된다.

 이 메시지는 GetMessage()의 리턴값을 0으로 만든다.

 이 메시지는 WinMain()에서만 받을 수 있다.

 

 

 

 

 전체적인 구조와 코드

#include <windows.h>

 

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass
=TEXT("First"
);

int
 APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
      ,LPSTR lpszCmdParam,int
 nCmdShow)
{
  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;
  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,NULL,0,0
)) {
    TranslateMessage(&
Message);
    DispatchMessage(&
Message);
  }
  return (int
)Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
  switch
 (iMessage) {
  case
 WM_DESTROY:
    PostQuitMessage(0
);
    return 0
;
  }
  return
(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

 

 

 

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비트 환경에서는 정수형의 길이가 바뀔 수도

 

 

 

 

 

 

728x90

 ▶Win32 API 주요 함수 아래 링크를 클릭 하세요

출처: http://www.nicklib.com/library/WIN32API/

'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글

Win32 API 프로그램 작성 순서 6단계  (0) 2014.10.21
Win32 API 기초정리  (0) 2014.10.20
※ WINAPI 기본형  (0) 2014.10.15
WIN API 시작하기 ver1_0a  (0) 2014.09.29
BITMAP and 영상출력 참고 사이트  (0) 2014.09.25
728x90

윈도우를 만드는 과정

1단계: WndClass 정의     윈도우의 기반이 되는 클래스를 정의한다.

 

 1단계

 WndClass 정의

 

 2단계

 RegisterClass

 

 3단계

 CreateWindow

 

 4단계

 ShowWindow

 

 5단계

 메세지 루프

 

 

 

 

※ WINAPI 기본형

 

728x90

 

0904-WIN API 시작하기 ver1_0a.docx

 

0904-WIN API 시작하기 ver1_0a.pdf

 

 

 

 

 

'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글

Win32 API 프로그램 작성 순서 6단계  (0) 2014.10.21
Win32 API 기초정리  (0) 2014.10.20
▶Win32 API 주요 함수  (0) 2014.10.17
※ WINAPI 기본형  (0) 2014.10.15
BITMAP and 영상출력 참고 사이트  (0) 2014.09.25
728x90

BITMAP 참고 사이트:

http://screwsliding.tistory.com/entry/Bitmap-%EC%9D%BC%EA%B5%AC%EC%A1%B0

영상출력 참고 사이트

http://donghwada.tistory.com/287

 

'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글

Win32 API 프로그램 작성 순서 6단계  (0) 2014.10.21
Win32 API 기초정리  (0) 2014.10.20
▶Win32 API 주요 함수  (0) 2014.10.17
※ WINAPI 기본형  (0) 2014.10.15
WIN API 시작하기 ver1_0a  (0) 2014.09.29