Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Four Squares
- Spring
- FIFO paging
- inflearn
- n타일링2
- redis
- 에러핸들링
- Window-Via-c/c++
- 열혈 tcp/ip 프로그래밍
- 김영한
- TCP/IP
- 스프링 핵심 원리
- C++
- 열혈 TCP/IP 소켓 프로그래밍
- 윤성우 저자
- HTTP
- Operating System
- BOJ
- 10026번
- 운영체제
- 우아한레디스
- 스프링 입문
- 우아한 테크 세미나
- 토마토
- 이펙티브코틀린
- 제프리리처
- 2475번
- C#
- Operating System.
- OS
Archives
- Today
- Total
나의 브을로오그으
[C++] WinAPI32 프로그래밍 개요 본문
[Win32API 프로그래밍이란?]
: 윈도우 운영체제가 제공하는 함수를 이용한 c언어 기반의 프로그래밍
c언어는 함수를 기반으로 프로그래밍
c++언어는 클래스를 기반으로 프로그래밍
결국 윈도우 프로그래밍은 os의 함수를 가지고 자원을 사용하여 프로그래밍
과거에는 MS-DOS가 있었음. 단일 프로세스만 가능했음.
Window OS는 멀티 프로세스임.
WIN프로그래밍은 자원을 독점하고 반환하고 이를 반복하여 프로그래밍을 한다.
[OS의 변화로 인한 프로그래밍 방식의 변화]
- 윈도우 운영체제 이전
프로그래밍이 운영체제를 제어
모든 프로그래밍을 프로그래머가 전담.
(키보드, 마우스 등을 직접 프로그래밍)
-> 메모리 상주 프로그램, BIOS
- 윈도우 운영체제 이후
: 운영체제로부터 모든 정보를 얻는다.
키보드, 마우스, 비디오카드, 프린터, 사운드 형태 등의 모든 자원을 os가 관리하며
응용 프로그램에서 사용 시 메시지 형태로 전달 받아 사용함.
사용하고 나면 반환함.
- 메시지 처리 방식이 중요하다!!!
[프로그래밍 형식의 변화]
main() -> WinMain() : 응용 프로그램 윈도우 생성(ENTRY)
WinProc() : 메시지 처리(PROCEDURE)
어떤 자원을 이용하겠다는 메시지가 발생하면
OS는 해당 자원을 사용할 수 있도록 윈도우 프로시저에 메시지를 보내줌.
[프로그래밍 구조 비교]
- C언어 코드
#include <stdio.h>
#include <conio.h>
int main()
{
int nKey;
while(1)
{
if (_kbhit()) // 키보드 입력이 들어왔을 떄 값을 받음.
{
nKey = getch(); // 버퍼에 키보드 입력이 들어오므로 버퍼에서 1바이트 반환
printf("%c", nKey);
}
}
return 0;
}
- Win32API 윈도우 프로그래밍 코드
int APIENTRY _tWinMain(HINSTANCE ...)
{
MSG msg;
HACCEL hAccelTable;
...
while(GetMessage(&msg, ...))
{
WndProc(hwnd, ...);
}
return hInstance;
}
메시지 처리는 WinProc으로 WM_CHAR메시지를 보냄.
... 200줄에 가까움.
기존 c프로그래밍과 WIN프로그래밍과의 가장 큰 차이점은
기존의 모든 실행은 os가 하며
os에게 요청하거나 전달받은 메시지를 통해
결과만 보여줌.
[윈도우 명칭]
타이틀바
최대화, 최소화, 닫기 버튼
시스템 메뉴 (좌측 상단의 아이콘)
메뉴바 (메뉴)
클라이언트 영역
[윈도우 데이터형]
메모리 크기 = 그 안에 저장된 값의 크기를 알 수 있음.
값이 중요하다!!!!!!!!!!!!
C언어 데이터형
char, short, int, long, float, double, long double
C++ 언어 데이터형
C언어 데이터형 + BOOL
[데이터형|
데이터형 | 정의 |
BYTE | typedef unsigned char BYTE |
BOOL | typedef int BOOL;(TRUE, FALSE) |
CHAR | typedef char CHAR |
COLORREF | typedef DWORD COLORREF |
DWORD | typedef unsigned long DWORD |
PVOID | typedef void* PVOID |
HANDLE | typedef PVOID HANDLE (중요) |
HDC | typedef HANDLE HDC |
HGDIOBJ | typedef HANDLE HGDIOBJ |
HINSTANCE | typedef HANDLE HINSTANCE |
HWND | typdef HANDLE HWND |
LPVOID | typedef void* LPVOID |
LPWORD | typdef void* LPVOID |
LPSTR | typedef CHAR* LPSTR |
LPWSTR | typedef WCHAR* LPWSTR |
LPTSTR | #ifdef UNICODE typdef LPWSTR LPTSTR; #else typedef LPSTR LPTSTR; #endif |
TCHAR | #ifdef UNICODE typdef WCHAR TCHAR; #else typdef CHAR TCHAR; #endif; |
UINT | typedef unsigned int UINT |
VOID | #define void VOID; |
WINDAPI | #define WINAPI __stdcall; |
WORD | typedef unsigned int WORD; |
WPARAM | typedef UINT_PTR WPARAM; |
UINT_PTR | #if defined(_WIN64) typdef unsigned __int64 UINT_PTR; #else typedef unsigned int UINT_PTR; #endif; |
LPARAM | typedef LONG_PTR LPARAM; |
LONG_PTR | #if defined(_WIN64) typedef __int64 LONG_PTR; #else typedef int LONG_PTR; #endif; |
윈도우에서의 데이터형은 그저 c/c++에서 사용하던 기본 자료형을
윈도우 스타일로 만들어서 사용하는 것일 뿐!!!!!
[인스턴스와 핸들] (중요도 : *****)
현대 OS는 멀티 태스킹 운영체제이다.
메모장 4개를 띄어놨다. 서로 다른 데이터를 저장했다.
이를 어떻게 구별할까?
바로 윈도우 별로 핸들값이 존재한다.
- 운영체제가 응용 프로그램을 실행 또는 구분하는 방법이 인스턴스와 핸들
HINSTANCE : 인스턴스 핸들 타입
HWND : 윈도우 핸들 타입
PVOID -> void* -> 4바이트의 양의 정수값
[인스턴스]
- 응용 프로그램 아이디 (서로 다른 응용프로그램 간 중복 x, os가 부여해줌)
- 같은 종류의 프로그램은 같은 인스턴스를 갖는다.
[핸들]
- 운영체제에서 할당한 자원의 아이디(윈도우, 펜, 브러쉬 등) (os가 부여해줌)
- 같은 종류의 인스턴스라도 핸들값은 다름.
[공통점]
1) 운영체제에서 할당하는 값
2) 중복되지 않는 값 -> 아이디의 속성
윈도우 프로그래밍할 때 가장 중요한 것
핸들 handle
HWND, HDC, HPEN, HBRUSH 등...
[헝가리언 표기법]
변수명 또는 함수명의 명명 규칙
관례적으로 사용
변수명만으로 용도 파악이 용이
[사용 방법]
- 의미 있는 단어를 연결하되 첫 문자는 대문자
(Person + Count = PersonCount)
- 데이터형을 의미하는 접두사를 붙임
(fCount, nNumber)
[변수명에 붙이는 접두사]
데이터형 | 접두사 | 예 |
BOOL, bool | b | bVariable |
char | ch, c | chVariable |
int, short | n, i | nVariable |
long | l | lVariable |
float | f | fVariable |
double | d | dVariable |
배열 | a | aVariable[10] |
DWORD | dw | dwVariable |
문자열 | sz, s, str | strVariable |
포인터 | p | pVariable |
핸들 | h | hVariable |
전역변수 | g_ | g_nVariable(정수형인경우) |
윈도우메시지 | msg | msgVariable |