線を引くには?

解決


z  2009-02-04 11:05:49  No: 69580

VisualStudio2005を使用しています。

言語はC++を使っているのですが、プログラムで罫線を引くことってできるのでしょうか?

どういった関数を利用すればよいのでしょうか?

ご教授よろしくお願い致します。


maru  2009-02-04 17:56:50  No: 69581

「罫線」とは?

線を引くのは LineTo()関数です。


z  2009-02-05 09:45:03  No: 69582

以下のDrawLine関数を使用して、線を引きたいのですが、
「静的でないメンバ関数の呼び出しが正しくありません」とエラーになってしまいます。

どのように修正すればよいのでしょうか?

System::Drawing::Pen^ redPen = gcnew Pen( Color::Red );
System::Drawing::Graphics::DrawLine(redPen,10,10,100,100);


Blue  2009-02-05 10:41:46  No: 69583

どこに記述していますか?
普通はFormやらPictureコントロールやらGrashicsのインスタンスを取得して
DrawLineメソッドを呼びます。
(静的メソッドではないのでインスタンスから呼ぶ
->意味不明ならC++の入門書を読むべき。そのまま突っ走っても挫折多し。)

http://msdn.microsoft.com/ja-jp/library/f956fzw1.aspx


επιστημη  URL  2009-02-05 15:28:26  No: 69584

それにそのコード、C++じゃないし。C++/CLIだし。


ずっとこむ  2009-02-05 20:37:37  No: 69585

コードを拝見するに、まず「罫」線ではないですよね。
それに、別の方がおっしゃっているように、C++/CLI は C++ とは「完全なる別物」です; なぜなら、C++/CLI で何個モノを作ろうとも、絶対に C++ は覚えられないので。
私はここにいたり、C++/CLI の存在意義を見つけることができません。SDK とは言わないまでも、MFC でもないのであれば、C# をお勧めします。どうせ .NET Framework を使ってしまうなら、初心者の見通しのよさの点からもそれがよいと思います。まだそんなに進んでいないようなので、それも考慮されてはどうでしょう。


επιστημη  URL  2009-02-05 20:47:12  No: 69586

> C++/CLI は C++ とは「完全なる別物」です

違います。
C++/CLIはC++を包含します。
C++/CLIのうちC++に含まれない部分が「完全なる別物」なだけです。
# アッタリメーですが


ずっとこむ  2009-02-05 22:31:23  No: 69587

まあ、表現の一部に不正確さがありましたね。


επιστημη  URL  2009-02-06 02:43:08  No: 69588

一部不正確なんてもんじゃない。まったく"逆"です。

「C++/CLI で何個モノを作ろうとも、絶対に C++ は覚えられないので」
じゃなく
「C++で何個モノを作ろうとも、絶対にC++/CLIの"/CLI"の部分は出てこないので」
です。


ずっとこむ  2009-02-06 18:07:40  No: 69589

まあ、表現に不正確さがありましたね。


επιστημη  URL  2009-02-06 18:41:56  No: 69590

> C++/CLI の存在意義を見つけることができません。

これもcase by case でしょう。
僕は重宝してますよ。
C/C++で書いたライブラリを活かしたまま.NET化するには
C++/CLIがもっとも簡単で確実です。

とはいえGUI部はC#で済ませますが。
たとえばこんな↓の。

http://codezine.jp/article/detail/2414


z  2009-02-07 05:40:34  No: 69591

みなさん、貴重なご意見、ありがとうございました。

以下のようにグラフ表示ボタンを押下すると、GraphShowウィンドウが表示され、そこに線を引きたいのですが、エラーとなってしまいます。

何が原因なのでしょうか?

ご教示よろしくお願い致します。

#pragma once

namespace test000000 {
  using namespace System;
  using namespace System::ComponentModel;
  using namespace System::Collections;
  using namespace System::Windows::Forms;
  using namespace System::Data;
  using namespace System::Drawing;

  public ref class Form1 : public System::Windows::Forms::Form
  {

  private: System::Windows::Forms::Button^  ButtonGraph;

  public:
    Form1(void)
    {
      InitializeComponent();
    }

  protected:
    ~Form1()
    {
      if (components)
      {
        delete components;
      }
    }
  private: System::Windows::Forms::Button^  button1;
  protected: 

  private:
    System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
    void InitializeComponent(void)
    {
      this->button1 = (gcnew System::Windows::Forms::Button());
      this->SuspendLayout();
      // button1
      this->button1->Location = System::Drawing::Point(98, 100);
      this->button1->Name = L"button1";
      this->button1->Size = System::Drawing::Size(75, 23);
      this->button1->TabIndex = 0;
      this->button1->Text = L"グラフ表示";
      this->button1->UseVisualStyleBackColor = true;
      this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
      // Form1
      this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);
      this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
      this->ClientSize = System::Drawing::Size(292, 266);
      this->Controls->Add(this->button1);
      this->Name = L"Form1";
      this->Text = L"Form1";
      this->ResumeLayout(false);

    }
#pragma endregion
  
  //グラフ表示ボタン押下
  private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    System::Windows::Forms::Form^ Form2 = gcnew Form;
    
    ButtonGraph = gcnew System::Windows::Forms::Button();
    ButtonGraph->Parent = Form2;
    ButtonGraph->Width = 50;
    ButtonGraph->Location = System::Drawing::Point(230, 54);
    ButtonGraph->Name = L"ButtonGraph";
    ButtonGraph->Size = System::Drawing::Size(50, 23);
    ButtonGraph->Text = L"グラフ表示";
    ButtonGraph->UseVisualStyleBackColor = true;
    ButtonGraph->Click += gcnew System::EventHandler(this, &Form1::ButtonGraph_Click);

    Form2->ShowIcon = false;
    Form2->MinimizeBox = false;
    Form2->MaximizeBox = false;

    Form2->Text = L"GrapthShow";
    Form2->Width = 200;
    Form2->Height = 200;
    Form2->MinimumSize = System::Drawing::Size(200,200);
    Form2->MaximumSize = System::Drawing::Size(200,200);

    Form2->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
    Form2->Activate();
    Form2->Show();
    Form2->Refresh();
  }

private: System::Void ButtonGraph_Click(System::Object^  sender, System::EventArgs^  e) {
  System::Drawing::Pen^ redPen = gcnew Pen( Color::Red );
  System::Drawing::Graphics::DrawLine(redPen,10,10,100,100);
}

  };
}


επιστημη  URL  2009-02-07 06:51:05  No: 69592

だからぁ、どこで・どんな エラー?

<再度>
普通はFormやらPictureコントロールやらGrashicsのインスタンスを取得して
DrawLineメソッドを呼びます。
(静的メソッドではないのでインスタンスから呼ぶ
->意味不明ならC++の入門書を読むべき。そのまま突っ走っても挫折多し。)
</再度>


z  2009-02-07 11:11:16  No: 69593

修行してきます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加