글 작성자: HEROHJK

범위 연산자, 스코프 연산자라고도 합니다.


보통 네임스페이스(이름공간)안에 있는 연산,객체를 찾을때 이용하는 문법인데요,


며칠전에 MFC 개발을 하다가 모르고 있던 부분을 발견했습니다.


메세지박스를 다이얼로그에 상속받아 새로 구현해서 이것저것 컨트롤들을 추가하던 도중,


뭔가 송수신할때 프로그레스바가 필요하겠다 싶어서 넣었습니다.


물론 메세지박스가 대기가 필요할때만 보여지고 그 외에는 안보여지게 하기 위해서(즉, 버튼이 있을때는 숨기는것입니다) 해당 컨트롤의 ShowWindow연산을 이용했습니다.


문제는 상속하여 새로 구현한 메세지박스는 필요할때만 생성하고 없애햐기때문에, 동적으로생성해야하는데, 이때 해당 컨트롤변수에 ShowWindow연산을 이용하면 생성 오류가 났던것이었습니다.


제가 추측하건데, MFC는 핸들을 기반으로 컨트롤들을 관리하기때문에, 동적 생성한 핸들을 제대로 확인이 불가능해서 생기는 오류 같았습니다.(이부분은 정확하지 않습니다. 틀린부분있으면 지적 부탁드립니다!)


그래서 조금 찾아본 결과, ShowWindow의 전역연산은 핸들을 직접 입력해야하는 방식이었고, 

::ShowWindow(핸들값,상태값)을 이용하여 문제를 해결할수 있었습니다.


종종 필요할때(인스턴트를 얻어오거나, 이름공간을 생략하지 않을때 등등)만 사용하는줄알고 그렇게 인식이 되어있었는데, 역시 손으로만 하는 코딩이 가장 무서운 것 같습니다. 


항상 생각하면서 하도록 노력해야겠네요.


범위 연산자 설명(MS)

반응형