2013-04-22 3 views
0

그래서 이전에 탐험 한 적이 있지만 그 위에 아무것도 찾을 수없는 문제가 있습니다. 완전히 사용자 정의 된 사용자 지정 탭 컨트롤 클래스를 만들었고 사용자가 다른 탭을 클릭 할 때 CDialog 개체를 표시하거나 숨 깁니다. 이렇게하기 위해 나는 paint 메소드를 오버로딩했다 (필자는 사용자가 그린 기능을 사용하지 않았다). 모든게 한 문제를 제외하고 잘 작동하는 것, 내가 가진 문제는 사용자가 현재 표시되고있는 대화 상자 (예 : CEdit) 중 하나를 선택하고 Enter 키를 누르면 tabCtrl은 WMPAINT를 받게됩니다. tabCtrl의 본문이 현재 대화 상자 위에 그려지는 메시지. 이 문제를 해결하기 위해 tabCtrl의 배경 지우기 메서드를 수정하여 현재 대화 상자에 대화 상자가 표시되지 않도록 수정했지만 페인트/쇼 때문에 Enter 키를 누를 때마다 깜박임이 발생합니다 대화 상자 조합이 발생했습니다. 나는 누군가가 전에이 문제를 다뤘는지와 수정이나 아이디어가 있었는지 궁금 해서요. 나는 일하는 것을 생각해 낼 수 없었다. 코드 부족으로 불편을 끼쳐 드려 죄송합니다. 소유자의 허락을 공유하지 않았습니다.Tab Control draw on Enter 키

답변

0

더블 버퍼링은 아마도 도움이 될 것입니다. Google에 알려주십시오. 많은 예가 있습니다. this article을 시작 지점으로 사용하십시오.

+0

sudgestion 주셔서 감사하지만 이중 버퍼링 문제는 아닙니다. 이중 버퍼링은 페인트 알고리즘에서 지연으로 인해 발생하는 깜박임을 처리합니다. 이는 페인트와 관련이 없습니다. 겹치는 컨트롤이 그려지는 방식 때문에 깜박임이 발생합니다. tabctrl은 Enter 키가 자식 컨트롤 중 하나를 누를 때마다 wmpaint 메시지를 수신하여 다시 칠하도록하고 다시 칠해 보이는 대화 상자를 덮습니다. – JBode

+0

탭 컨트롤 사각형이 그 안에있는 페이지만큼 커야합니다. 참고로, 여기에는 절대 이유가 없습니다. MFC의 Tab 컨트롤은 VB 나 C++ Builder와 같은 다른 언어의 탭 컨트롤과 다릅니다. 탭 컨트롤 일뿐입니다. 즉, 크기가 탭의 크기 여야하고 페이지가 포함되지 않아야 할 때 (예 : – cha

+0

) 탭 컨트롤에 페이지의 전체 영역을 차지하게해야합니다. 나는 그것을 축소하는 것을 결코 고려하지 않았다. 탭 컨트롤은 페이지에 정의 된 영역 주위에 테두리를 그립니다. Im이 올바르게 생각한다면 테두리를 축소하여 축소 할 수 있습니까? 탭 컨트롤에는 pageRect GetTabPageRect()를 찾는 메서드가 있습니다. 탭 컨트롤에 페이지 영역이 포함되어 있지 않으면이 함수는 쓸데없는 것입니다 ... 이것은 tabControls를 처리하는 흥미로운 방법이지만 작동하는 것처럼 보입니다. tabControl의 페이지 영역을 투명하게 채우지 않는 것에 대해 어떻게 생각하십니까? – JBode