2017-01-20 12 views
0

Windows 8 애플리케이션에서 Win2D를 사용하기 시작하려고합니다. 필자는 단지 새 프로젝트에 라이브러리를 설치하려고 시도했지만 기능 중 하나를 사용하여 원을 그렸지만 이해할 수없는 오류로 더 이상 갈 수는 없습니다.표현식에 클래스 유형이 있어야합니다 (C++의 초급 ​​오류 Win2D를 사용하는 Windows 8 앱)

다음은 Mainpage.xaml.cpp 파일 내에 자동으로 만들어진 이벤트 처리기입니다. 내 오류는 함수 내에서 단일 코드 줄 시작 부분에있는 'args '부분에 빨간색 밑줄이 그 어져 있음을 알 수 있습니다. 'args'아래 빨간색 선 위로 마우스를 가져 가면 "표현식에 클래스 유형이 있어야합니다"라는 메시지가 표시됩니다. 아무도 이것으로 도울 수 있습니까? 에서 MainPage.xaml에서

<Page 
    x:Class="AdditiveSignals.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:AdditiveSignals" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml" 
    mc:Ignorable="d" 
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 

    <Grid> 
     <canvas:CanvasAnimatedControl Draw="CanvasAnimatedControl_Draw" /> 
    </Grid> 
</Page> 

에서 MainPage.xaml

에서 MainPage.xaml.h

// 
// MainPage.xaml.h 
// Declaration of the MainPage class. 
// 

#pragma once 

#include "MainPage.g.h" 

namespace AdditiveSignals 
{ 
    /// <summary> 
    /// An empty page that can be used on its own or navigated to within a Frame. 
    /// </summary> 
    public ref class MainPage sealed 
    { 
    public: 
     MainPage(); 

    protected: 
     virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override; 
    private: 
     void CanvasAnimatedControl_Draw(Microsoft::Graphics::Canvas::UI::Xaml::ICanvasAnimatedControl^ sender, Microsoft::Graphics::Canvas::UI::Xaml::CanvasAnimatedDrawEventArgs^ args); 
    }; 
} 

에서

필요한 경우

void AdditiveSignals::MainPage::CanvasAnimatedControl_Draw(Microsoft::Graphics::Canvas::UI::Xaml::ICanvasAnimatedControl^ sender, Microsoft::Graphics::Canvas::UI::Xaml::CanvasAnimatedDrawEventArgs^ args) 
{ 
    args.DrawingSession.DrawCircle(640, 360, 30.0f, Colors->Blue); 
} 

은 여기에 전체 코드이다. cpp (전체 코드)

// 
// MainPage.xaml.cpp 
// Implementation of the MainPage class. 
// 

#include "pch.h" 
#include "MainPage.xaml.h" 

using namespace AdditiveSignals; 

using namespace Platform; 
using namespace Windows::Foundation; 
using namespace Windows::Foundation::Collections; 
using namespace Windows::UI; 
using namespace Windows::UI::Xaml; 
using namespace Windows::UI::Xaml::Controls; 
using namespace Windows::UI::Xaml::Controls::Primitives; 
using namespace Windows::UI::Xaml::Data; 
using namespace Windows::UI::Xaml::Input; 
using namespace Windows::UI::Xaml::Media; 
using namespace Windows::UI::Xaml::Navigation; 

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 

MainPage::MainPage() 
{ 
    InitializeComponent(); 
} 

/// <summary> 
/// Invoked when this page is about to be displayed in a Frame. 
/// </summary> 
/// <param name="e">Event data that describes how this page was reached. The Parameter 
/// property is typically used to configure the page.</param> 
void MainPage::OnNavigatedTo(NavigationEventArgs^ e) 
{ 
    (void) e; // Unused parameter 

    // TODO: Prepare page for display here. 

    // TODO: If your application contains multiple pages, ensure that you are 
    // handling the hardware Back button by registering for the 
    // Windows::Phone::UI::Input::HardwareButtons.BackPressed event. 
    // If you are using the NavigationHelper provided by some templates, 
    // this event is handled for you. 
} 

//This event handler will be called 60 times per second 
void AdditiveSignals::MainPage::CanvasAnimatedControl_Draw(Microsoft::Graphics::Canvas::UI::Xaml::ICanvasAnimatedControl^ sender, Microsoft::Graphics::Canvas::UI::Xaml::CanvasAnimatedDrawEventArgs^ args) 
{ 


    args.DrawingSession.DrawCircle(640, 360, 30.0f, Colors->Blue); 
} 
+0

이것은 C++/CLI 소스이므로 C++/CLI 태그 아래에 있어야한다고 생각합니다. [read more] (https://en.wikipedia.org/wiki/C%2B%2B/CLI) –

+0

UI 코드에는 C++/CLI를 사용하면 안됩니다. –

답변

2

언어에 대한 표준 참고 사항 : C++/CLI는 C# 또는 다른 .Net 코드에서 C++ 코드를 호출 할 수 있도록하는 브리지 역할을합니다. 기본 개발 언어로 사용되지 않습니다. C++을 배우고 싶다면 GUI 툴킷으로 MFC와 함께 C++을 사용할 것입니다. 관리되는 코드를 배우고 싶다면 C#에서 WinForms 또는 WPF를 배울 수 있습니다.

상기한다 :

void CanvasAnimatedControl_Draw(ICanvasAnimatedControl^ sender, CanvasAnimatedDrawEventArgs^ args) 
{ 
    args.DrawingSession.DrawCircle(640, 360, 30.0f, Colors->Blue); 
} 

args가 참조 형식이 아닌 값 유형이다. (그것은 참조 (^)에 의해 전달되었습니다. 이것은 C++ 객체를 포인터 (*)로 전달하는 것과 대략 유사합니다. 참조 유형이므로, 해당 멤버는 .이 아닌 ->을 사용하여 C++ 포인터처럼 액세스됩니다 개체에.

DrawingSession도 참조 유형이므로 해당 멤버도 ->을 사용하여 액세스 할 수 있습니다.

Colors은 클래스의 이름입니다. 정적 멤버는 ::을 사용하여 액세스합니다.

args->DrawingSession->DrawCircle(640, 360, 30.0f, Colors::Blue); 
+0

감사합니다. 여러분의 관심에 부응하기 위해, 저는 대학 프로젝트의 일부로 파형을 그리며 움직이는 프로그램을 만들고 있습니다. 일반적으로 C++을 사용하지만, 관련 튜토리얼은 C#을 사용하는 Win2D에서만 사용할 수 있습니다. 이것은 단순히 C++의 기본 설정으로 인해 C++의 C# 튜토리얼에서 같은 코드를 사용하려고 시도했지만이 환경이 일반적으로 어떻게 작동하는지에 대해서는 거의 알지 못했다고합니다. 이 질문을 게시 한 이후 나는 쉽게 C#으로 전환했지만, 이것은 미래를 알기에 좋은 소식입니다! – fmwavesrgr8