본문 바로가기

[MFC] GetDlgItem() CWnd::GetDlgItem 1. 함수의 원형 CWnd *GetDlgItem(int nID) const; 2. 함수의 기능 이 함수는 일반적으로 대화상자에 생성된 컨트롤의 주소를 얻는데 사용됩니다. 왜냐하면, 대화상자는 대부분 리소스 편집기를 이용해서 사용할 컨트롤을 편집하고 DoModal 함수를 사용하여 컨트롤을 편집하고 DoModal 함수를 사용하여 대화상자가 생성되는 시점에, CDialog 클래스가 리소스 파일을 참조하여 컨트롤을 생성하기 때문에 기본적으로 대화상자 위에 생성된 컨트롤의 주소를 알 수가 없습니다. 프로그래머는 기본적으로 리소스 편집기에서 편집할 때 사용한 컨트롤의 번호만을 알고 있기 때문에 이 컨토를 번호를 이용하여 해당 컨트롤의 주소를 얻을 때, 이 함수를 사용합니다. 3. 함수.. 더보기
[MFC] 특정 영역 속에 마우스 클릭시 이벤트 발생법 탭컨트롤 상단에 오른쪽 마우스를 이용하여 어떤 탭을 클릭했는지 출력하도록 구성한다면 아래와 같이 작성할수 있습니다. 제가 링크해드린 예제에서처럼 CTabCtrl에서 계승 받은 클래스에 WM_RBUTTONUP 메시지를 등록하시고 아래와 같은 코드를 추가하세요 ^^;; WM_LBUTTONDOWN 메시지 핸들러에서 다음과 같은 처리를 해줍니다... CRect rt; // 픽쳐 컨트롤의 사각형 영역 조사 // 픽쳐 컨트롤의 사각형 좌표를 구함 // GetClientRect 는 크기를 구하니 GetWindowRect 이용... ((CStatic*)GetDlgItem(IDC_STATIC_PIC))->GetWindowRect(&rt); // GetWindowRect 로 얻은 좌표는 스크린 좌표(물리적) 이니 이를 /.. 더보기
[MFC] SDI 환경에서 이벤트 처리 OnCommand() 뷰 클레스에서 작업할때, 짜증나는게 어떤 마우스 이벤트나, 키 이벤트를 처리하는데, 수많은 마우스 이벤트에 대해서 처리하다 보면 뷰클레스의 크기가 커지고, 뷰클레스에서 작업하다 보니깐, 다른 클레스에 접근하는게 쉽지 않아서, 객체들간이 메시지 주고 받는게 적어지고, 거의 뷰클레스 위주로 짜여지는 악순환이 생기게 된다. 즉 뷰클레스에서 일어나는 이벤트는 뷰클레스에 추가할 수 밖에 없는 현실... 나도 한참 뒤에 알았는데 좋은 방법이 있다. 바로 메인프레임에서 이벤트를 건드는 것이다. 메인프레임에서는 AfxGetMainWnd() 함수를 통해서 다른 클레스 객체에 접근이 쉽기때문이다. 초록색으로 표시한 부분은, 일반적인 이벤트 핸들러 추가로 생성한 코드고 빨간색은 메인프레임의 OnCommand를 오버라이드 한.. 더보기