none
C++/CXによる文字の表示、及び直線の描画について RRS feed

  • 質問

  • H25年11月5日
    C++/CXによる文字の表示、及び直線の描画について

    Windows 8 ストアアプリでC++/CXのコードで画面に文字を表示したり、直線を描画したいのですが、その方法がわかりません。
    C#ではネットに出ていたサンプルを改造して、文字や直線を描画できました。(下記4項のプログラムを参照願います。)
    これと同じことを、C++/CXで行いたいのですが、どのようにプログラムすればよいか、全くわかりません。
    本や、ネットを探しても、サンプルコードがみつかりません。またマイクロソフトのサイトは難しくて良く理解できません。
    下記1項、及び2項について、サンプルコードなどをご教示いただけるとありがたいです。
    当方は、ストアアプリ、及びC#、C++/CXについては全くの初心者です。よろしくお願いします。

    1.画面に下記項目をC++/CXで指定して、文字を表示する。
    (1)文字のサイズ
    (2)文字の色
    (3)フォント
    (4)文字を表示する位置(x、y座標)

    2.画面に下記項目をC++/CXで指定して、直線を描画する。
    (1)線の太さ
    (2)線の色
    (3)開始位置(x、y)座標、終点の(x、y)座標

    3.当方の環境
    (1)Windows 8.1 Professional
    (2)Visual Studio Professional 2013

    4.C#で作成したコード(MainPage.xaml.cs)

    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;

    // この下を追加
    using Windows.UI;
    using Windows.UI.Xaml.Shapes;


    // 空白ページのアイテム テンプレートについては、http://go.microsoft.com/fwlink/?LinkId=234238 を参照してください

    namespace Graphic_sample_UI
    {
        /// <summary>
        /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
        /// </summary>
        public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                this.InitializeComponent();
            }

            /// <summary>
            /// このページがフレームに表示されるときに呼び出されます。
            /// </summary>
            /// <param name="e">このページにどのように到達したかを説明するイベント データ。Parameter
            /// プロパティは、通常、ページを構成するために使用します。</param>
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                // この中身をすべて追加

                System.Diagnostics.Debug.WriteLine(Window.Current.Bounds.Width);
     
                Canvas canvas = new Canvas();
                canvas.Background = new SolidColorBrush(Color.FromArgb(255,255,255,255));
               
     
                // draw text
                TextBlock textBlock = new TextBlock();
                textBlock.Text = "サインカーブ";
                textBlock.FontSize = 50;
                textBlock.Foreground = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
                Canvas.SetLeft(textBlock, 700);
                Canvas.SetTop(textBlock, 10);
                canvas.Children.Add(textBlock);

                // ここから自分で追加(直線描画)
                const int x0 = 200,         // 座標軸X原点
                    // y0 = 600,         // 座標軸Y原点    ここでは不要
                          xStart = 50,     // 座標軸X開始点
                          yStart = 200,     // 座標軸Y開始点
                          xWidth = 1200,    // 座標軸 横軸(X方向)長さ
                          yHight = 800;     // 座標軸 縦軸(Y方向)長さ

                int y0 = yStart + yHight/ 2; // 座標軸Y原点


                // 座標軸 X方向
                Polyline myPolylineX = new Polyline();
                myPolylineX.Stroke = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));    // 黒
                myPolylineX.StrokeThickness = 2;
                myPolylineX.FillRule = FillRule.EvenOdd;
                Point Point1X = new Point(xStart, y0);
                Point Point2X = new Point(x0 + xWidth + 100, y0);
                PointCollection myPointCollectionX = new PointCollection();
                myPointCollectionX.Add(Point1X);
                myPointCollectionX.Add(Point2X);
                myPolylineX.Points = myPointCollectionX;
                canvas.Children.Add(myPolylineX);

          // 途中省略

                // ここまで自分で追加した

                this.grid.Children.Add(canvas);
            }
        }

    }

    2013年11月5日 2:46

回答

  • コード上で行う場合はDirect2Dを使った方がはるかに楽ですし、速度的な面でも有利です

    http://www.moonmile.net/blog/archives/3480

    SurfaceImageSource を使って、metro アプリに部分的に DirectX 描画する

    サンプルはこちらにあるので参照してみてください


    • 回答としてマーク 星 睦美 2013年11月8日 2:34
    2013年11月6日 11:02

すべての返信

  • コード上で行う場合はDirect2Dを使った方がはるかに楽ですし、速度的な面でも有利です

    http://www.moonmile.net/blog/archives/3480

    SurfaceImageSource を使って、metro アプリに部分的に DirectX 描画する

    サンプルはこちらにあるので参照してみてください


    • 回答としてマーク 星 睦美 2013年11月8日 2:34
    2013年11月6日 11:02
  • jbh03215 様

    ご回答ありがとうございます。また、よいサイトを教えていただき、ありがとうございます。ただ、今の私にはDirectXは聞いたことがある程度で、まったく何もわかりません。

    少し時間を見て勉強したいと思います。ありがとうございました。

    2013年11月6日 13:04