BUG: Windows XP 비주얼 스타일 MFC 응용 프로그램을 사용하는 경우 그리퍼 막대 잘못 그려지는

기술 자료 번역 기술 자료 번역
기술 자료: 843490 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

도구 모음에서 그리퍼 막대 다음 조건에 모두 해당할 때 도구 모음 배경 색을 사용하여 그려지는 없습니다 나타날 수 있습니다.
  • Microsoft Windows XP를 실행하는 컴퓨터에서 작업합니다.
  • 단일 문서 인터페이스 (SDI) 응용 프로그램 또는 Visual C++ 6.0 및 Microsoft Foundation 클래스 (MFC) 라이브러리를 사용하여 개발된 다중 문서 인터페이스(MDI) 응용 프로그램을 실행하고 있습니다.
  • 매니페스트 파일을 추가하여 Windows XP 비주얼 스타일 MFC 응용 프로그램에서 구현해야 했습니다.
참고 응용 프로그램이 Windows XP 비주얼 스타일 구현하지 않는 경우 이 동작은 알 수행할 수 없습니다. 또한 대신 CToolBar 클래스에서 파생된 컨트롤 막대를 CReBar 클래스에서 파생된 컨트롤 막대를 사용할 경우 이 동작은 알 수행할 수 없습니다.

그리퍼 막대 색을 바탕 화면 또는 도구 모음 배경 색 대신 응용 프로그램의 배경 색을 사용하여 그려집니다.

원인

응용 프로그램에서 매니페스트 파일을 사용하여 Windows XP 비주얼 스타일 구현할 때 그리퍼 막대 도구 모음에 바탕 화면 색 사용하거나 응용 프로그램의 배경 색을 사용하여 그려집니다.

해결 방법

제대로 원하는 막대 그리퍼 그리려면 코드 CToolBar 클래스에서 파생된 새 클래스를 추가해야 합니다 CToolBar 클래스의 다른 메서드를 재정의해야 및 파생된 클래스 멤버를 사용해야 합니다.

다음 단계를 수행하여가 이 문제를 해결하려면 이 절에서 수행합니다 개요를 다음과 같습니다.
  1. CToolBar 클래스를 sub-class.
  2. DrawGripper 메서드 및 기본 클래스의 DoPaint 메서드를 재정의하십시오.
  3. OnNcPaint 메시지를 처리하십시오.
  4. 파생된 클래스 멤버 변수를 CToolBar 클래스 멤버 변수를 대신 사용하십시오.
이렇게 하려면 다음과 같이 하십시오.

참고 다음 절차에서는 "절에서 설명한 828548VC6 예제 프로젝트를 기반으로 합니다.
  1. Microsoft Visual Studio 6.0 시작하십시오.
  2. Visual Studio 6.0 828548VC6 프로젝트를 엽니다.
  3. 작업 창에서 FileView 탭을 클릭하십시오.
  4. 헤더 파일 폴더를 확장한 다음 Mainfrm.h 파일을 두 번 클릭하십시오.

    Mainfrm.h 파일을 코드 편집기에서 엽니다.
  5. CMainFrame 클래스 정의 앞에 다음 코드를 추가합니다. CMyToolBar
    class CMyToolBar : public CToolBar
    {
    public:
    	void DrawGripper(CDC* pDC, const CRect& rect);
    	void EraseNonClient();
    	virtual void DoPaint(CDC* pDC);
    
    protected:
    
    	//{{AFX_MSG(CMyToolBar)
    	afx_msg void OnNcPaint();
    	//}}AFX_MSG
    	
    	DECLARE_MESSAGE_MAP()
    };
  6. 코드 편집기에서 다음 코드를. 찾을
    CToolBar    m_wndToolBar;
  7. 다음 코드는. 6단계에서 찾은 코드를
    CMyToolBar    m_wndToolBar;
  8. 작업 창에서 FileView 탭에서 소스 파일 폴더를 확장한 다음 Mainfrm.cpp 파일을 두 번 클릭하십시오.
  9. 컴파일러 지시문 코드 editor.
    //////////////////////////////////////////////////////
    // CMyToolBar
    
    BEGIN_MESSAGE_MAP(CMyToolBar, CToolBar)
    	//{{AFX_MSG_MAP(CMyToolBar)
    	ON_WM_NCPAINT()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    void CMyToolBar::OnNcPaint() 
    {
    	EraseNonClient();
    }
    void CMyToolBar::EraseNonClient()
    {
    
    	// Get window DC that is clipped to the non-client area.
    	CWindowDC dc(this);
    	CRect rectClient;
    	GetClientRect(rectClient);
    	CRect rectWindow;
    	GetWindowRect(rectWindow);
    	ScreenToClient(rectWindow);
    	rectClient.OffsetRect(-rectWindow.left, -rectWindow.top);
    	dc.ExcludeClipRect(rectClient);
    
    	// Draw the borders in the non-client area.
    	rectWindow.OffsetRect(-rectWindow.left, -rectWindow.top);
    	DrawBorders(&dc, rectWindow);
    
    	// Erase the parts that are not drawn.
    	dc.IntersectClipRect(rectWindow);
    	SendMessage(WM_ERASEBKGND, (WPARAM)dc.m_hDC);
    
    	// Draw the gripper in the non-client area.
    	DrawGripper(&dc, rectWindow);
    }
    
    void CMyToolBar::DoPaint(CDC* pDC)
    {
    	ASSERT_VALID(this);
    	ASSERT_VALID(pDC);
    
    	// Paint inside the client area.
    	CRect rect;
    	GetClientRect(rect);
    	DrawBorders(pDC, rect);
    	DrawGripper(pDC, rect);
    }
    
    void CMyToolBar::DrawGripper(CDC* pDC, const CRect& rect)
    {
    	pDC->FillSolidRect( &rect, ::GetSysColor(COLOR_BTNFACE)); // Fill in the background.
    	CToolBar::DrawGripper(pDC,rect);
    }
    /////////////////////////////////////////////////////////////////////////
  10. 응용 프로그램을 빌드하려면 F7 키를 누릅니다.
  11. 응용 프로그램을 실행하려면 Ctrl + F5를 누릅니다.
"현상" 절에서 설명한 동작은 알 수행할 수 없습니다.

현재 상태

Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열된 제품에서 이 문제를 확인했습니다.

추가 정보

문제를 재현하는 방법

MFC SDI 응용 프로그램 또는 MFC MDI 응용 프로그램을 만들려면 다음과 같이 하십시오.
  1. 시작 을 누르고 모든 프로그램 가리킨 다음 Visual Studio 6.0 가리킵니다.
  2. Microsoft Visual C++ 6.0 클릭하십시오. Visual C++ Microsoft Visual Studio IDE에 열립니다.
  3. 파일 메뉴에서 새로 만들기 를 클릭하십시오. 새로 만들기 대화 상자가 나타납니다.
  4. 프로젝트 탭에서 MFC 응용 프로그램 마법사 (exe).
  5. 프로젝트 이름 상자에 828548VC6을 입력하십시오.
  6. 위치 상자에 C:\ 를 입력한 다음 확인 을 누릅니다.
  7. MFC 응용 프로그램 마법사 - 1단계 대화 상자에서 단일 문서 또는 여러 문서 를 클릭한 다음 마침 을 클릭하십시오.
  8. 새 프로젝트 정보 대화 상자에서 확인 을 클릭하십시오.
  9. Windows XP Visual 스타일을 구현하십시오.
    1. In a text editor such as Notepad, paste the following XML code.
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
        <description>Character Map application</description> 
        <dependency> 
            <dependentAssembly> 
                <assemblyIdentity 
                    type="win32" 
                    name="Microsoft.Windows.Common-Controls" 
                    version="6.0.0.0" 
                    processorArchitecture="X86" 
                    publicKeyToken="6595b64144ccf1df" 
                    language="*" 
                /> 
            </dependentAssembly> 
        </dependency> 
        </assembly>
    2. 문서를 디버그 폴더에 저장하십시오. 이름 문서 828548VC6.exe.manifest입니다. Debug 폴더는 프로젝트에 828548VC6 폴더에 있습니다.

      참고 매니페스트 파일은 실행 파일과 같은 폴더에 있어야 때문에 디버그 폴더에 있는 문서를 저장해야 합니다.
  10. 응용 프로그램을 빌드할 때 F7 키를 누릅니다.
  11. 응용 프로그램을 실행하기 위해 Ctrl + F5를 누릅니다.
"현상" 에서 설명한 현상이 섹션.

back to the "Resolution" section

참조

자세한 내용은 다음 Microsoft 개발자 네트워크 (MSDN) 웹 사이트를 방문하십시오.
CReBarCtrl 사용
http://msdn2.microsoft.com/en-us/library/aa271542(VS.60).aspx

CControlBar::DrawGripper (Visual C++ 라이브러리)
http://msdn2.microsoft.com/en-us/library/hw7ew2hb(vs.71).aspx

CControlBar::DoPaint (Visual C++ 라이브러리)
http://msdn2.microsoft.com/en-us/library/sxhf5yks(vs.71).aspx

속성

기술 자료: 843490 - 마지막 검토: 2014년 2월 9일 일요일 - 수정: 1.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Foundation Class Library 4.2?을(를) 다음과 함께 사용했을 때
    • Microsoft Visual C++ 6.0 Enterprise Edition
키워드:?
kbnosurvey kbarchive kbmt kbgraphic kbdraw kbrebarctrl kbmdi kbappwizard kbcode kbbug KB843490 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com