C ++ CLI рисует линию при открытии окна - PullRequest
0 голосов
/ 30 января 2019

У меня есть проект C ++ CLI, создан новый пользовательский интерфейс.Идея состоит в том, чтобы открыть этот интерфейс и нарисовать линию или показать картинку.Если я вызываю метод рисования непосредственно после InitializeComponent ();или внутри метода drawWindow_Load - безуспешно.Если я добавлю кнопку и вызову точно такой же метод, я смогу увидеть краску.Что мне не хватает?Файл .h:

#pragma once
namespace UserInterface {

    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 drawWindow : public System::Windows::Forms::Form
    {
    public:
        drawWindow(void)
        {
            InitializeComponent();
            paintIt();
        }

    protected:
        ~drawWindow()
        {
            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(-1, -1);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 1;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &drawWindow::button1_Click);
            // 
            // drawWindow
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(9, 20);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(278, 244);
            this->Controls->Add(this->button1);
            this->Name = L"drawWindow";
            this->Text = L"drawWindow";
            this->Load += gcnew System::EventHandler(this, &drawWindow::drawWindow_Load);
            this->ResumeLayout(false);

        }
#pragma endregion
    private: System::Void drawWindow_Load(System::Object^  sender, System::EventArgs^  e) {
        //paintIt();
    }
    public: System::Void paintIt();
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e);
    };
}

и файл cpp:

#include "stdafx.h"
#include "drawWindow.h"

System::Void UserInterface::drawWindow::paintIt()
{
    Graphics ^ pg = CreateGraphics(); 

    Pen ^ red_pen = gcnew Pen(Color::Red);

    pg->DrawLine(red_pen, 30, 30, 350, 350);

    delete pg;
}

System::Void UserInterface::drawWindow::button1_Click(System::Object^  sender, System::EventArgs^  e) {
    paintIt();
}

1 Ответ

0 голосов
/ 12 марта 2019

Следующее рисует прямоугольник на моей форме, переопределяя функцию рисования (это должно быть достаточно просто, чтобы изменить прямоугольник на линию - т.е. использовать g-> DrawLine вместо g-> DrawRectangle): -

    virtual Void Form1::OnPaint(PaintEventArgs^ pe) override
    {
        Graphics^ g = pe->Graphics;
        g->Clear(Color::AntiqueWhite);

        Pen^ redPen = gcnew Pen(Color::Red, 3.0f);

        // Draw rectangle to screen.
        g->DrawRectangle(redPen, 500, 595, 100, 100);  
    }

Если в форме присутствуют другие элементы управления, они появятся перед прямоугольником.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...