2013-03-14 1 views
2

요즘에는 Win32에서 많은 일을 해왔지만 꽤 익숙하고 조직에 관한 조언이 필요합니다. C++에서는 전역 변수를 선언하기 위해 구문 적으로 작동하지만 변수를 어디서나 수정할 수 있으므로 변경 내용을 추적하기가 훨씬 어려워지기 때문에 항상 잘못된 방식이라고 생각했습니다.Win32를 사용하는 조직의 일반적인 규칙은 무엇입니까?

내 Win32 프로젝트에서 여러 곳에서 수정해야하는 몇 가지 변수가 있습니다. 예를 들어, 그러한 변수 중 하나가 WndProc 함수와 대화 프로 시저 함수에도있었습니다. 사용 된 방식 때문에 WndProc의 실제 값을 사용하고 DialogBoxParam을 사용하여 대화 상자를 호출하고 lParam 값을 통해 대화 상자에 값을 전달할 수있었습니다.

그러나 드로잉에 사용하는 특정 비트 맵이나 WndProc 함수의 여러 인스턴스에서 값을 유지해야하는 여러 다른 창 메시지 호출에 사용되는 변수와 같은 다른 값이 있습니다. 여러 기능. 내가 만든 함수의 매개 변수를 제어 할 수 있지만 WndProc 함수에 변수를 전달해야 여러 개의 다른 창 메시지와 상관없이 사용할 수 있습니까? 여러 값을 전달해야하는 경우 어떻게해야합니까?

지금까지 나는 모든 것을 글로벌하게 만들었지 만 효과가 있지만 나에게는 기분이 좋지 않습니다 ...하지만 일부 변수는 일반적으로 컨벤션의 문제로 전역 적이라는 것을 알고 있습니다 - 주 윈도우와 인스턴스 변수 .

모두 어떻게 생각하십니까?

+2

예 : 전역 변수가 "불량"입니다. 그리고 예, 고전적인 Win32/C 프로그래밍에서 전역 변수는 종종 다소 피할 수없는 경우가 많습니다. 그것이 당신의 질문입니까? – paulsm4

답변

0

전역 변수를 사용하는 대신 관련 윈도우와 연관된 C++ 객체에 윈도우 관련 데이터를 저장할 수 있습니다.

는 윈도우와 C++ 객체를 연결 기존 C++ 클래스 프레임 워크의 숫자 중 하나를 사용하십시오 (예 : 예를 들어, 마이크로 소프트 ’ WTL 또는 TORJO의 Win32GUI), 또는 자신이 SetWindowSubclass API 함수를 사용하여 않습니다.

해결 방법 : ™ 해결책을 위해 나는 다른 대답으로 a complete C++ example을 제시했습니다.

작은 프로그램의 전역 변수 + 대화 상자가 가장 쉽고 아무런 문제가 없습니다. 그래서 일반적으로 오른쪽 도구 ™을 사용하십시오. 더 큰 직업을 원할 경우, 더 무거운 툴링과 헬리콥터를 사용하십시오.

0

코드에 구체적인 예가 있으면 도움이 될 수 있습니다. 그러나 나는 평생 동안 이야기하고 있다고 생각합니다. 리소스 (비트 맵)가 있고 다른 Windows 메시지에 대한 응답으로 여러 번 참조해야합니다. 네가 세계화 할 수는있어.하지만 그게 엉성하지 않다고 나는 동의한다.

누가 창을 만들었습니까? 귀하의 "App"클래스 또는 그 라인을 따라 뭔가. 클래스의 수명은 논리적으로 창보다 길기 때문에 창에 필요한 리소스를 보유 할 수 있습니다.

또는 더 나은 방법은 "Window"클래스를 만드는 것입니다. AppWindow 개체를 인스턴스화합니다. Window 개체는 Win32 창을 만들고 HWND를 보유합니다 (이제는 App에서 추상화 했으므로 자세한 내용을 알 필요가 없습니다). Window 인스턴스는 비트 맵 리소스를 보유 할 수 있습니다.