2010-05-25 3 views
0

C++ 프로그래머라면 Win32 API 또는 .NET으로 GUI 응용 프로그램을 개발 하시겠습니까?Win32에서 GUI 응용 프로그램 개발하기

+0

가능한 복제본 [C++을 사용하여 Windows 응용 프로그램 용 GUI를 만드는 방법은 무엇입니까?] (http://stackoverflow.com/questions/488837/how-do-i-create-a-gui-for-a- windows-application-using-c) –

+0

주관적이고 논증적인 질문을했기 때문에 주석을 삭제했습니다. 논평이 없으면 질문은 다른 질문의 정확한 사본입니다. 논평과 함께 질문은 주관적이고 논증 적이며, 또 다른 질문의 정확한 사본입니다. –

답변

3

Win32는 API (응용 프로그래밍 인터페이스)입니다. .NET도 그렇습니다. POSIX도 그렇습니다. 첫 번째 두 개에는 기본 API에 통합 된 GUI 툴킷이 있지만 원하는 경우 Qt (Skildrick에서 제안한 도구) 또는 wxWindows와 같은 다른 툴킷을 사용할 수 있습니다. * nix의 경우 주 API는 POSIX이고 거의 모든 API는 하위 레벨 그래픽 레이어로 X11을 사용합니다. 그런 다음 위에 GUI 도구 키트가 필요합니다 (POSIX에는 아무 것도 통합되어 있지 않습니다). 원하는 디스플레이의 유형에 따라, OpenGL은 UI 위젯보다는 고속 벡터 그래픽스에 중점을두기는하지만 매우 휴대 성이 뛰어난 또 다른 GUI 툴킷입니다.

Win32 API의 통합 GUI 툴킷을 사용하는 좋은 이유 중 하나는 Win32 API의 다른 많은 부분이이를 사용한다는 것입니다. WSAAsyncSelect 및 MsgWaitForMultipleObjectsEx는 GUI 메시지 처리에 통합 된 비 GUI 기능입니다. 좋은 래퍼 툴킷은 이러한 기능을 계속 사용할 수있는 충분한 제어권을 제공하지만이 방식은 비 Windows OS 및 대부분의 대체 툴킷이 이식성 이상의 기능을 제공하므로 매우 다릅니다.

.NET에서 메시지 처리 중 MsgWaitForMultipleObjects를 사용하지 않으므로 Windows에서 최적으로 실행되도록 처음부터 설계된 .NET도 비동기 프로 시저 호출 또는 UI 스레드의 대기 가능한 타이머를 사용할 수 없습니다. 그래서 결국에는 여러 스레드와 엄청난 양의 동기화 코드를 사용해야합니다.

그러나 MFC와 멀리 떨어져 있어야합니다. 그것은 기본적으로 컴파일러 지원없이 예외를 구현하는 학문적 인 연습이지, 심각한 응용 프로그램을 위해 원하는 프레임 워크의 종류가 아닙니다. 대부분의 다른 "기능"은 현대 C++ 디자인이 더 잘 이해 된 이후에 추가되었지만 일관된 유지라는 이름으로 예외 및 가상 상속에 대한 초기 해킹에 의해 시작된 위험한 지저분한 스타일을 계속 사용합니다. 오늘 이용할 수있는 선택의 폭이 훨씬 넓습니다.

+0

고마워요! – Gareth87

+0

.net GUI는 API 기반이 아닙니다. WPF는 API 접근 방식이 아닌 장면 그래프로, 일부 유형의 응용 프로그램에 유용 할 수 있습니다. –

+0

그리고 장면 그래프를 작성하는 API가 있습니다. 그러나 API보다는 "GUI 툴킷"이라는 문구를 사용하는 데주의를 기울였으며 WPF는 GUI 툴킷이라고 할 수 있습니다. –

8

Qt으로 갈 것입니다. 이것은 크로스 플랫폼 C++ GUI 프레임 워크입니다.

+0

... 그리고 함께 작업 할 훌륭한 프레임 워크입니다. :) – Donotalo

0

무료 평가판을 사용해보세요. 아주 좋았습니다. 그것은 C# 프로그래머를위한 C#과 .net의 가이드이며, 평범한 키티 (kiddy) 기사로 바로 건너 뜁니다. 내가 말하고 싶지만

http://www.charlespetzold.com/dotnet/

1

둘을한다. .NET이 나오기 전에 Win32에 대한 약간의 지식을 배웠습니다. 나는 Win32 API와 MFC 둘 다 가지고 놀았다. 그것은 매우 교육적이었습니다. Windows가 귀하의 응용 프로그램과 귀하가 기대하는 것들을 어떻게 처리하는지에 대해 많이 배웠습니다. 제가 돌아가서 .NET을 배웠다면, 이전의 경험이 없어도 더 많은 것을 고맙게 생각할 것입니다.

관련 문제