검색결과 리스트
…™업무일지。/…™WINAPI。에 해당되는 글 9건
- 2014.10.27 WINAPI 시리얼 통신 예제 소스
- 2014.10.22 Resource(리소스)
- 2014.10.22 (NonQueued Messages)넌 큐 메시지 와 (Queued Messages)큐 메시지
- 2014.10.21 Win32 API 프로그램 작성 순서 6단계
- 2014.10.20 Win32 API 기초정리
- 2014.10.17 ▶Win32 API 주요 함수
- 2014.10.15 ※ WINAPI 기본형
- 2014.09.29 WIN API 시작하기 ver1_0a
- 2014.09.25 BITMAP and 영상출력 참고 사이트
글
'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글
Resource(리소스) (0) | 2014.10.22 |
---|---|
(NonQueued Messages)넌 큐 메시지 와 (Queued Messages)큐 메시지 (0) | 2014.10.22 |
Win32 API 프로그램 작성 순서 6단계 (0) | 2014.10.21 |
Win32 API 기초정리 (0) | 2014.10.20 |
▶Win32 API 주요 함수 (0) | 2014.10.17 |
설정
트랙백
댓글
글
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 등록
'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글
WINAPI 시리얼 통신 예제 소스 (0) | 2014.10.27 |
---|---|
(NonQueued Messages)넌 큐 메시지 와 (Queued Messages)큐 메시지 (0) | 2014.10.22 |
Win32 API 프로그램 작성 순서 6단계 (0) | 2014.10.21 |
Win32 API 기초정리 (0) | 2014.10.20 |
▶Win32 API 주요 함수 (0) | 2014.10.17 |
설정
트랙백
댓글
글
메시지 보내기
운영체제의 메시지 큐를 거치는지 여부에 따른 메시지를
큐 메시지(Queued Messages)와 넌 큐 메시지(Nonqueued Messages)
큐 메시지(Queued Messages): 운영체제 거침
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
넌 큐 메시지(Nonqueued Messages): 급한 메시지 메시지 큐를 거치지 않고 바로 보내는 것
여러개의 윈도우가 있을때 어떠한 data를 보내고 싶을 때
윈도우 핸들을 알면 가능해 진다.
예)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 |
설정
트랙백
댓글
글
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단계 : 메시지 루프
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() 함수의 기본구조
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() 함수의 기본예제
{
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()에서만 받을 수 있다. |
전체적인 구조와 코드
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));
}
'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글
Resource(리소스) (0) | 2014.10.22 |
---|---|
(NonQueued Messages)넌 큐 메시지 와 (Queued Messages)큐 메시지 (0) | 2014.10.22 |
Win32 API 기초정리 (0) | 2014.10.20 |
▶Win32 API 주요 함수 (0) | 2014.10.17 |
※ WINAPI 기본형 (0) | 2014.10.15 |
설정
트랙백
댓글
글
메세지
키보드 입력등 이벤트가 발생할 때 발생하는 양의 정수값
인스턴스(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비트 환경에서는 정수형의 길이가 바뀔 수도
'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글
(NonQueued Messages)넌 큐 메시지 와 (Queued Messages)큐 메시지 (0) | 2014.10.22 |
---|---|
Win32 API 프로그램 작성 순서 6단계 (0) | 2014.10.21 |
▶Win32 API 주요 함수 (0) | 2014.10.17 |
※ WINAPI 기본형 (0) | 2014.10.15 |
WIN API 시작하기 ver1_0a (0) | 2014.09.29 |
설정
트랙백
댓글
글
▶Win32 API 주요 함수 아래 링크를 클릭 하세요
'…™업무일지。 > …™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 |
설정
트랙백
댓글
글
윈도우를 만드는 과정
1단계: WndClass 정의 윈도우의 기반이 되는 클래스를 정의한다.
1단계 |
WndClass 정의 |
|
2단계 |
RegisterClass |
|
3단계 |
CreateWindow |
|
4단계 |
ShowWindow |
|
5단계 |
메세지 루프 |
|
※ WINAPI 기본형
'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글
Win32 API 프로그램 작성 순서 6단계 (0) | 2014.10.21 |
---|---|
Win32 API 기초정리 (0) | 2014.10.20 |
▶Win32 API 주요 함수 (0) | 2014.10.17 |
WIN API 시작하기 ver1_0a (0) | 2014.09.29 |
BITMAP and 영상출력 참고 사이트 (0) | 2014.09.25 |
설정
트랙백
댓글
글
'…™업무일지。 > …™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 |
설정
트랙백
댓글
글
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 |
RECENT COMMENT