📄 form1.h
字号:
//
this->blackContextMenuItem->Name = L"blackContextMenuItem";
this->blackContextMenuItem->Size = System::Drawing::Size(151, 22);
this->blackContextMenuItem->Text = L"Black";
this->blackContextMenuItem->Click += gcnew System::EventHandler(this, &Form1::blackToolStripMenuItem_Click);
//
// redContextMenuItem
//
this->redContextMenuItem->Name = L"redContextMenuItem";
this->redContextMenuItem->Size = System::Drawing::Size(151, 22);
this->redContextMenuItem->Text = L"Red";
this->redContextMenuItem->Click += gcnew System::EventHandler(this, &Form1::redToolStripMenuItem_Click);
//
// greenContextMenuItem
//
this->greenContextMenuItem->Name = L"greenContextMenuItem";
this->greenContextMenuItem->Size = System::Drawing::Size(151, 22);
this->greenContextMenuItem->Text = L"Green";
this->greenContextMenuItem->Click += gcnew System::EventHandler(this, &Form1::greenToolStripMenuItem_Click);
//
// blueContextMenuItem
//
this->blueContextMenuItem->Name = L"blueContextMenuItem";
this->blueContextMenuItem->Size = System::Drawing::Size(151, 22);
this->blueContextMenuItem->Text = L"Blue";
this->blueContextMenuItem->Click += gcnew System::EventHandler(this, &Form1::blueToolStripMenuItem_Click);
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->BackColor = System::Drawing::SystemColors::ControlLightLight;
this->ClientSize = System::Drawing::Size(355, 285);
this->ContextMenuStrip = this->contextMenuStrip1;
this->Controls->Add(this->toolStrip1);
this->Controls->Add(this->menuStrip1);
this->MainMenuStrip = this->menuStrip1;
this->Name = L"Form1";
this->Text = L"CLR Sketcher";
this->MouseUp += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_MouseUp);
this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::Form1_Paint);
this->MouseDown += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_MouseDown);
this->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::Form1_MouseMove);
this->menuStrip1->ResumeLayout(false);
this->menuStrip1->PerformLayout();
this->toolStrip1->ResumeLayout(false);
this->toolStrip1->PerformLayout();
this->contextMenuStrip1->ResumeLayout(false);
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
private: System::Void lineToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
elementType = ElementType::LINE; }
private: System::Void rectangleToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
elementType = ElementType::RECTANGLE; }
private: System::Void circleToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
elementType = ElementType::CIRCLE; }
private: System::Void curveToolStripMenuItem_DoubleClick(System::Object^ sender, System::EventArgs^ e) {
elementType = ElementType::CURVE; }
private: System::Void blackToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
color = Color::Black; }
private: System::Void redToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
color = Color::Red; }
private: System::Void greenToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
color = Color::Green; }
private: System::Void blueToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
color = Color::Blue; }
private: System::Void colorToolStripMenuItem_DropDownOpening(System::Object^ sender, System::EventArgs^ e) {
blackToolStripMenuItem->Checked = color == Color::Black;
redToolStripMenuItem->Checked = color == Color::Red;
greenToolStripMenuItem->Checked = color == Color::Green;
blueToolStripMenuItem->Checked = color == Color::Blue;
}
private: System::Void elementToolStripMenuItem_DropDownOpening(System::Object^ sender, System::EventArgs^ e) {
lineToolStripMenuItem->Checked = elementType == ElementType::LINE;
rectangleToolStripMenuItem->Checked = elementType == ElementType::RECTANGLE;
circleToolStripMenuItem->Checked = elementType == ElementType::CIRCLE;
curveToolStripMenuItem->Checked = elementType == ElementType::CURVE;
}
// Current element type
ElementType elementType;
// Current drawing color
Color color;
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
Graphics^ g = e->Graphics;
sketch->Draw(g);
if(tempElement)
tempElement->Draw(g);
}
// Records when drawing an element is in progress
bool drawing;
// Records the initial mouse cursor position
Point firstPoint;
private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if(e->Button == System::Windows::Forms::MouseButtons::Left)
{
if(mode == Mode::Normal)
drawing = true;
firstPoint = e->Location;
}
}
private: System::Void Form1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if(drawing)
{
if(tempElement)
Invalidate(tempElement->Bound); // The old element region
switch(elementType)
{
case ElementType::LINE:
tempElement = gcnew Line(color, firstPoint, e->Location);
break;
case ElementType::RECTANGLE:
tempElement = gcnew Rectangle(color, firstPoint, e->Location);
break;
case ElementType::CIRCLE:
tempElement = gcnew Circle(color, firstPoint, e->Location);
break;
case ElementType::CURVE:
if(tempElement)
safe_cast<Curve^>(tempElement)->Add(e->Location);
else
tempElement = gcnew Curve(color, firstPoint, e->Location);
break;
}
Invalidate(tempElement->Bound); // The new element region
Update();
}
else if(mode == Mode::Normal)
{
Element^ element = sketch->HitElement(e->Location);
if(highlightedElement == element)
return;
if(highlightedElement)
{
Invalidate(highlightedElement->Bound);
highlightedElement->highlighted = false;
highlightedElement = nullptr;
}
if(element)
{
highlightedElement = element;
highlightedElement->highlighted = true;
Invalidate(highlightedElement->Bound);
}
Update();
}
else if(mode == Mode::Move && e->Button == System::Windows::Forms::MouseButtons::Left)
{ // Move the highlighted element
if(highlightedElement)
{
Invalidate(highlightedElement->Bound); // Region before move
highlightedElement->Move(e->X - firstPoint.X, e->Y - firstPoint.Y);
firstPoint = e->Location;
Invalidate(highlightedElement->Bound); // Region after move
Update();
}
}
else if(mode == Mode::Rotate)
{
}
}
private: System::Void Form1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
if(!drawing)
{
mode = Mode::Normal;
return;
}
if(tempElement)
{
sketch->Add(tempElement);
tempElement = nullptr;
Invalidate();
}
drawing = false;
}
// Temporary store for the element being drawn
Element^ tempElement;
// Stores the current sketch
Sketch^ sketch;
protected:
// The currently highlighted element
Element^ highlightedElement;
private: System::Void contextMenuStrip1_Opening(System::Object^ sender, System::ComponentModel::CancelEventArgs^ e) {
contextMenuStrip1->Items->Clear(); // Remove existing items
if(highlightedElement)
{
contextMenuStrip1->Items->Add(moveContextMenuItem);
contextMenuStrip1->Items->Add(deleteContextMenuItem);
contextMenuStrip1->Items->Add(sendToBackContextMenuItem);
}
else
{
contextMenuStrip1->Items->Add(lineContextMenuItem);
contextMenuStrip1->Items->Add(rectangleContextMenuItem);
contextMenuStrip1->Items->Add(circleContextMenuItem);
contextMenuStrip1->Items->Add(curveContextMenuItem);
contextMenuStrip1->Items->Add(contextSeparator);
contextMenuStrip1->Items->Add(blackContextMenuItem);
contextMenuStrip1->Items->Add(redContextMenuItem);
contextMenuStrip1->Items->Add(greenContextMenuItem);
contextMenuStrip1->Items->Add(blueContextMenuItem);
// Set checks for the menu items
blackContextMenuItem->Checked = color == Color::Black;
redContextMenuItem->Checked = color == Color::Red;
greenContextMenuItem->Checked = color == Color::Green;
blueContextMenuItem->Checked = color == Color::Blue;
lineContextMenuItem->Checked = elementType == ElementType::LINE;
rectangleContextMenuItem->Checked = elementType == ElementType::RECTANGLE;
circleContextMenuItem->Checked = elementType == ElementType::CIRCLE;
curveContextMenuItem->Checked = elementType == ElementType::CURVE;
}
}
private: System::Void deleteContextMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
if(highlightedElement)
{
sketch->Delete(highlightedElement);
Invalidate(highlightedElement->Bound);
highlightedElement = nullptr;
Update();
}
}
private: System::Void sendToBackContextMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
if(highlightedElement)
{
sketch->Add(sketch->Delete(highlightedElement));
highlightedElement->highlighted = false;
Invalidate(highlightedElement->Bound);
highlightedElement = nullptr;
Update();
}
}
private: System::Void moveContextMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
mode = Mode::Move;
}
Mode mode;
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -