1998/06/24 조경민

안냐떼요
neri라져~
오랜만에~~^^;
크크.....
윈도우가 나온지 어언 10년이 넘었습니다. 1985년에 윈도우1.0이
나오고여..
이제는 윈98도 나올때가 머지 않았습니다.
윈98은 제가 알기로는 9월 8일날 MS에서 공식적으로
VC++6.0 (MS의 윈도개발통합환경)과 VJ++등..
비주얼 스튜디오 신버전과 함께 윈98을 발표한다고 하는데요
이제는 도스 마지막버전인 7.0으로..
도스는 끝을 볼뜻합니다...
다시 말해서 이제는 도스용 프로그래머로 돈을 벌기 힘들다
-_-; 라는 극단적인 말이..
윈도우 프로그래머로 나서야 겠네요.
윈도우 프로그래머가 되기 위해서는 윈도 프로그래밍을
할쭐 알아야 합니다.
윈도우 프로그래밍에는 여러 가지 언어(도스에서 쓰던 언어)
가 발전된 형식으로 나왔는데요....
대표적인것이...
MS사의
C/C++형식의 VC와
Basic형식의 VB (Visual Basic)
java비슷한  VJ++(확실치 않아여 지가 안써서--)
등등....
이런것들을 통합하여 언어를 초월한 통합환경인
Visual Studio라는 것으로 쌓습니다.
그리고... 도스의 강자였던
Bolland사.. (물론 저번에 Visigenic Software회사와
합병을 한후 INPRISE라는 이름으로 바꾸었습니다. )
Pascal형식의 Delphi (델파이)
C/C++ 형식의 C++ Builder ( 씨뿔뿔 빌더 )

자바역시
자바회사의 언어구...
( 자바는 단독 애플리케이션 프로그래밍이 가능하지만
  일반적으로 웹상의 플랫폼기반 프로그래밍을
  목표로 하고 있습니다. )

사이베이스 cybase (스펠링 까묵음 죄송)
사의 C++형식의 Power Builder라는 언어도 있습니다.

어떤 언어를 선택하느냐는 전적으로
프로그래머의 선택에 달려 있습니다.
저같은 경우는 Win32API SDK와 VC그리고 VB을 택했습니다.
VC Inside Secret이라는 책에 작은 글씨로..
언어는 언어가 돌아갈 운영체제를 만든 회사것이
더 다른 언어에 비해 운영체제에 더 가깝고 최신 정보에
민감하다라는 것이 큰 도움을 주었습니다.

VB이나 Delphi는 RAD라고도 불립니다.
Rapid Application Development 라고 해서
빠르게 응용프로그램을 만들어 낼수 있는 언어를 통칭하는 것입니다.
Power Builder역시 빠르게 구현할수 있습니다.
이런 언어들은 거의 기본적인 프로그래밍이
폼 디자인처럼 보입니다.
회색의 다이얼로그 창이 있으면...
필요에 의해서 에디트박스도 붙이고
버튼도 붙이고 해서 재미있고 비주얼하게
프로그래밍을 할수 있습니다.
(극단적으로 어렵다는 DB(DataBase)역시
'붙이는' 작업만으로 모든것이 끝나기도 합니다. )

앗.. 넘 길다.
다시 나중에..
꾸벅


# 갈무리를 종료하시고 <Enter>를 치십시오. :

안녕하세요 neri입니다.
그냥 쓰는 김에 (도배성이 짙다) 그냥 씁니다.
API라는 것이 있습니다.
물론 외형적으로 함수들의 묶으로 보입니다.
printf와 같은 역활을 하는 DrawText,TextOut등..
모든 함수들이 모여 있습니다.
윈1.0이 나올때부터 있었던 이 라이브러리는
윈도우 프로그래머라면 누구든지 필수적으로
알아야 하는 것입니다.
(물론 RAD로 하다보면 API를 잘 몰라도 될꺼 같지만
당장 RAD로 DirectX겜을 만들라고 한다면.........
당신은 벌써 DirectX라는 API확장 함수라이브러리를
쓰는 것입니다. )
그런데 API는 그 라이브러리 특성상 Windows의
로우레벨 렝귀지에 가깝습니다.
즉... 도스에서 보면...
바이오스와도 레벨이 비슷하다는 말이죠..
( 같다는 것이 아라니 ... 그만큼 밑에 깔린 라이브러리란 말)
그런데.. 이 라이브러리는 대부분 C형식으로 쓰게 되는데
즉 Win32 API SDK는 C형식의 라이브러리라고 보면 편합니다.
여기서 SDK는 Software Development Kit 의 약자로
라이브러리 + 유틸리티 + 언어  묶음을 말합니다.
실제로 윈도 API 프로그래밍의 프로그래밍 엔트리 포인트는
도스의 main에 상응하는 int 리턴형인 WinMain으로 시작합니다.
다시 말해서... C를 할줄 안다면
윈도우 운영체제에 대한 기본적인 상식만 있다면
API 프로그래밍이 가능하다는 것입니다.
여기의 기본적인 상식의 가장 큰 기둥은
윈도우라는 운영체제가 바로 메세지-전달 체제라는 것입니다.
윈도우에서는 모든 처리가 메세지 발생에서 시작합니다.
실제 API 프로그래밍에서도 마우스 왼쪽 누르기에 대한
메세지로 WM_LBUTTONDOWN 이라는 (32비트상수) 것으로
대응시켜서 프로그래밍을 합니다.
간단히 생각해보면 메세지 처리를 위해서
메세지는 여러가지가 있을테니까 이런 메세지를 처리위해
다중분기문이 필요하죠..
그리고 메세지는 계속 나오니까 반복문도 필요하고..
결국 윈도우 프로그래밍의 겉모양은 아래 코드를 벗어나지
못합니다. ( 대부분의 경우 )

int WINAPI WinMain( HINSTANCE ....)
{
MSG msg;  // 메세지를 담는 변수
         :
윈도우 양식결정,윈도우 나타내기
         :
while(GetMessage(0,NULL,NULL)) // 종료 메세지가 나올때까지
{
         :
}
}

... WndProc(...)  // 윈도우 프로시저 <0-- 메세지 처리부분
{
swtich(msg)       // 가져온 메세지 하나를 처리한다.
{
WM_CREATE: ...     // 윈도우가 생성될때 나타나는 메세지
WM_PAINT : ...     // 윈도우가 그리기를 할때 나타나는 메세지
WM_MOUSEMOVE: ...  // 마우스가 움직을때 나타나는 메세지
WM_DESTROY : ...   // [x]버튼 윈도우 끝내기를 할때 나타나는 메세지
}

이런식으로
기본적인 API프로그래밍이 시작됩니다.
( 사실 아무리 복잡해도 이 형태를 벗어 날수 없습니다. )
API를 공부함으로써 윈도우 운영체제의 돌아가는 것을 쉽게 알수
있습니다. 마치 Dos에서 어셈같은 저수준 프로그래밍을 하면서
알게되는 하드웨어 동작방식을 아는 것처럼...
그럼..


# 갈무리를 종료하시고 <Enter>를 치십시오. :


안녕하세요 neri입니다.
이번에는 간단히 윈도 프로그래밍을 할려면 어디서 부터 시작을
해야 하는지 알아 보도록하겠습니다.
( 이것은 전적으로 저의 생각입니다. 공식적으로 발표된 내용은
  아닙니다. )

경우 1. 난 WIN SDK(API) 프로그래머로 나설래요!

먼저 알아 둘것은 API프로그래밍을 위해선 C가 기본이라는 것입니다.
물론 VB(Visual Basic)에서도 API라이브러리 함수를 Declare(선언 포함)
하여 불러와 쓸수 있지만, API 파라미터가 베이직의 자료형과 조금씩
불일치 하는 등. C에서의 함수 호출이 오히려 간단하고 명료합니다.
따라서 C에대한 기본 문법을 익혀야 합니다.

1. TC/BC/MSC C계열 언어를 배워 본다.
2. 윈도 프로그래밍 개론적인 책을 본다. (API기반)
   => 추천하는 책 : 전설적인 베스트셀러
                    WINDOWS PROGRAMMING 95 ( 찰스 페졸드)

단지 주의 할사항은 C를 공부하는 것은 API함수를 부르고
SDK를 하기 위한 준비 단계이므로 C에서의 키워드(if,while)
같은것에 신경을 써서 공부하십시요.
printf,scanf는 더이상 윈도프로그래밍(콘솔프로그래밍 제외)
에서는 사용되지 않습니다. 또한 파일 입출력 부분또한
사용가능하긴 하지만 윈도우 파일 보안과는 무관하게 돌아가게
되므로 위험의 요지가 있습니다.
(이미 API에서는 모든 일에대한 방대한 량의 API함수가 내장되어
있습니다. 윈도우 부팅 함수까지 내장되는 등.. 웜부팅.등...
바이오스에 대한 생각도 접어두시고 인터럽트 또한 도스에서나
사용되던 구식 얘기가 되었습니다. 이제는 바이오스를 인터럽트
가로채는 것이 아니라 윈도우라는 운영체제가 선점식 멀티 테스킹
즉, 프로세스와 스레드를 통해서 프로그래램을 동시에 돌리게
됩니다. )

단점으로는 . API프로그래밍은
어떻게보면 ASM프로그래밍 처럼 답답 할수도 있습니다.
코드량도 많고 모든것을 일일이 다 처리해야 합니다.
애니메이션 버튼을 만들라고 하면 기본 버튼객체를
이용하여 서브클래싱이나 수퍼클래싱하거나
다른 방법으로 애니메이션을 구현해야 합니다. 물론
모든것이 프로그래머의 코딩실력에 달리게 되죠..


경우 2. VC++ 프로그래머가 될레요

VC++은 말그대로 C++기능 확장까지 됩니다.
C++의 진가인 클래스 상속에 의해서 코드재사용이 용이하여
모든 객체를 클래스화한 라이브러리 MFC( Microsoft Foundation Class)
라는 것을 이용하여 프로그래밍합니다.
이미 이 라이브러리에는 기본 API를 class로 감싼 것도 있고
확장한 클래스도 있기때문에 API 프로그래밍과는 다르게
쉽고 빠르게 프로그래밍을 할수 있습니다.

1. C를 공부한다.
2. C++을 공부한다.
3. API를 공부한다.
4. VC++을 공부한다.

특히 VC++에서는 OLE,COM같은 (요즘은 ActiveX)컴포넌트 객체가
많이 생겼 프로그래밍을 '껌'같이 만듭니다.
MP3플레이어를 만들고 싶읍니까? 그럼 MP3 AcitveX를 구하여서
자기의 다이얼로그에다가 그 객체를 붙여주고 몇줄 코딩을
하십시요. 이미 잘 동작되기로(효율적인) 인정된 ActiveX 코드가
완벽하게 프로그램의 완성도를 높여 줄것입니다.
역시 웹 브라우저니 웹집이니 여러 AcitveX가 개발되었습니다.
(AcitveX는 라이브러리입니다. 확장 클래스 라이브러리라고
보시면 옳습니다. )

그러나 이런 방식으로 코딩을 하다보면 원초적인 실력은 늘지
않습니다. 즉.. PCX의 내부, MP3의 내부가 어떻게 되었는지
알필요도 없게 되는 등 문제가 좀 있습니다.
(프로그래머의 노력 여하에 따라 다릅니다. )


경우 2. VB, Delphi같은 RAD 프로그래머가 될래요

<<< 다음 번에 또 쓰죠.. 넘 길다. ^^; >>>

안녕하세요 neri입니다.

아참. VC++로 공부할때 추천할 책은
Inside Secret Visual C++5.0 삼각형 (저자 까묵음)
Visual C++ Programming Bible Ver 5.x 영진출판사 이상엽
비주얼 C++5 언리쉬드 대림출판
등.

경우 3. RAD 프로그래머를 위해서

VB,Delphi등이 이런것에 속하는 대표적인 언어입니다.
프로그래밍이 간결하고 쉬워서 누구든지 마음만 있다면
재미있게 시작할수 있는 좋은 프로그램들입니다.

1. 기반 언어를 배운다. (VB은 Basic , Delphi는 Pascal)
2. RAD 언어를 배운다.

윈도우 메세지 처리등은 안 생각해도좋고....
단지 윈도우 운영체제는 메세지-처리 운영체제라는 것만
머리속에 잘 기억하고 있으시다면 쉽게 프로그래밍으로
들어갈수 있습니다.
장점은 쉽고 빠른 생산성으로 돈벌기 좋은 언어이라는 점
사실 VC같은 언어는 깊숙한 어려운 작업을 요하는
서버/클라이언트 네트워킹, OLE 작성 같은 것에 접합
간단한 프로그램을 만든다면 굳이 힘든 VC같은것을 안해도
됩니다.
추천하고 싶은 책은
초보자를 위한 한글 비주얼베이직5.0 영진출판사
등이 있습니다.

경우 4. 게임 프로그래머가 되고 싶어요

게임 프로그래머는 언어에 관심을 갖지 않죠.
단지 게임 만들기 편하고 강력한 언어와 강력한
라이브러리를 요구할 뿐입니다.
따라서 언어선택은 위의 어떤것이든 자유입니다.
그리고 라이브러리는 DirectX가 대표적이며
WinG이나 기타 잡다한 라이브러리가 있습니다.
개인적으로 다이렉트 를 추천합니다.
VB이나 델파이나 VC에서나 API SDK를 이용할수
있습니다.

*WinAPI* 프로그래밍을 위해서는 VC++이 있어야 합니까?
아닙니다. VC++은 도움말까지 깔면 300메가를 넘습니다.
또한 정품 씨디를 살려면 200만원(?) 정도 듭니다.
대신 API프로그래밍이 가능한 컴파일러로
LCC라는 API전용 컴파일러가 있습니다.(C가능 C++ 불가능)
또한 GCC 윈도 컴파일포팅한 cygnus가 잇습니다.
LCC는 압축 1.7메가 정도 cygnus는 13메가 정도입니다.

'KB > MFC/Win32' 카테고리의 다른 글

[mfc] 런타임 클래스  (0) 2004.03.19
[개요] 윈도우프로그래밍  (0) 2004.03.19
언리쉬드 9장 윈도우 다이얼로그 박스 컨트롤  (0) 2004.03.19
Unleashed Visual C++ 5.0 ????  (0) 2004.03.19
[db] sql  (0) 2004.03.19

+ Recent posts