|
애구~, 또 질문 하셨네요. -____________________-a
앞에서 설명하였듯이 두가지 컴파일러는 개발하는 과정이 틀립니다. 틀리게 되는 원인은 MFC와 VCL의 차이입니다. 이 둘 다 기본적으로는 Windows API를 클래스화한 것입니다. 그런데, 앞에서도 설명드렸다시피 VCL은 클래스를 구성할 때, 함수와 인터페이스를 함께 가지고 있고, 이에 따라 Windows API 상에서 인터페이스 관련한 명령들을 숨긴 경우가 많습니다. MFC는 함수만을 가지고 있는 경우가 많습니다. MFC는 Windows API를 그냥 클래스화 한 경우가 많습니다. 즉, 외부적으로 보아서는 그대로 다 들어난다(소스코딩해주어야 한다)는 것입니다.
한 가지 예를 들어 보죠.
특정문자를 윈도우에 쓰는 것을 각 컴파일러별로 보면,
1. 빌더
Label1->Caption = "test";
이것으로 빌더는 화면상에 test라는 문자가 자신의 윈도우에 나타납니다.
2. MFC
함수원형: int DrawText (const CString& str, LPRECT lpRect, UINT nFormat);
(참고로 TextOut이라는 함수를 써도 됩니다.)
MFC의 경우 특정글자를 쓰기위해서는 위의 함수를 소스코드 상에 입력하여 주어야 합니다. 즉, 다른말로 하면, 빌더에서는 이러한 함수를 대치문(할당문, = ) 내부에 숨김으로서 개발자가 현재 개발하고 있는 주(主)알고리즘에 더 치중할 수 있도록 하는 것입니다.
3. Windows API
함수원형:
int DrawText(
HDC hDC, // handle to device context
LPCTSTR lpString, // pointer to string to draw
int nCount, // string length, in characters
LPRECT lpRect, // pointer to struct with formatting dimensions
UINT uFormat // text-drawing flags
);
Windows API의 함수원형 경우 MFC와 비교해 보면 HDC hDC(Device Context handle)가 하나 더 있는 것을 알 수 있습니다(다른 것은 같고 int nCount가 더 있는데, 이는 나타낼 문자열의 길이를 나타내므로 큰 의미는 없습니다). 이는 윈도우즈 상에 그림(글자도 윈도우즈 상에서는 그림으로 처리합니다.)을 그릴 때, 반드시 필요한 Device Context라는 것을 이용하기 위한 것입니다(GetDC ()라는 함수를 이용하여 이 DC를 얻어 옵니다.). MFC는 이를 클래스화하여 CDC라는 클래스를 만들고 그 내부에 이름이 같은 함수를 멤버함수로 만들어 둔 것뿐입니다.
이제 어느 정도 이해가 되시나요 ?
앞의 설명에서 덧붙였던 유우머에 MFC가 하나의 초식을 펼치기 위해서는 무지막지한 내공을 필요로 한다고 하는 것이 이해가 됩니까 ?
따라서 빌더만을 공부한다면 MFC 소스코드를 읽을 수 없습니다. 또한 MFC만을 공부하면 빌더 소스코드를 읽을 수 없습니다.
그래서, 저는 프로그래밍을 공부하고자 하는 분들에게 말씀드리는 부분이 중급 이상의 실력을 쌓을려면 반드시 Windows API를 공부하라고 충고합니다. 이를 공부하지 않고는 보다 섬세한 프로그래밍을 할 수 없습니다. 윈도우즈 환경하에서 프로그램을 개발하고자 한다면 최종 기착점이 Windows API가 되는 것입니다. 공부하는 순서로는
빌더 (일단 프로그래밍의 재미를 알아야 하닌까... ^^a) -> Windows API -> MFC
순으로 공부하면 보다 수월하지 않을까 생각합니다.
Windows API부터 공부하는 것은 MFC가 원체 복잡하게 만들어 놓아 MFC부터 공부하면 갈피를 못잡기 때문입니다(이렇게 되는 원인은 MFC에는 Windows API의 개념뿐만 아니라 Doc, View라는 새로운 개념도 포함하고 있고 하여 상당히 복잡합니다.). 제가 옛날에 MFC -> Windows API 순으로 공부했었는데, 미치는 줄 알았습니다.
ㅠ____ㅠ
BestDragon 님이 쓰신 글 :
:
: 안녕하십니까 ?
:
: 얼마전에 Delphi, C++ Builder, Visual C++의 차이점에 대해 문의점을
: 들렸는데..
: 좋은 답변 감사합니다. 많이 도움이 되었습니다.
:
: 씨빌더에 대해 또 의문점이 있어서요..
:
: 기존의 프로그램은 아마(?) C++빌더보다 Visual C++로 작성된것이 많을 것으로 압니다.
: 그런데 C++빌더를 공부한 사람이 Visual C++로 작성한 소스를 분석하는데 어려움이 없는지
: 궁굼합니다.
:
: 프로그램 구조와 문법모두 같은지 ..?
: 만약 차이점이 있다면 무엇인지 알고 싶습니다.
:
: 자세히 설명 좀 해주십시요 ..
: 씨빌더를 많이 사용해보신분들의 많은 답변 부탁드립니다.
:
|