领取MOLI红包
栏目分类

你的位置:ZTG中文网 > Vulcan Forged (PYR)中文网 >

Vulcan Forged (PYR)中文网

新手学C++/CLI及C#
blog 新手学C++/CLI及C# ·         程序结构 C++/CLI风格(此代码大部分由系统生成)   #pragma once ///声明命名空间 namespace Form1 {     /////////////////引入命名空间        using namespace System;        using namespace System::ComponentModel;        using namespace System::Collections;        using namespace System::Windows::Forms;        using namespace System::Data;        using namespace System::Drawing;     /////////////////////////////////        /// <summary>        /// Form1 摘要        /// </summary>        public ref class Form1 : public System::Windows::Forms::Form        //声明类(CLR)        {        public:               Form1(void)               {                      InitializeComponent();                      //                      //TODO: 在此处添加构造函数代码                      //               }          protected:               /// <summary>               /// 清理所有正在使用的资源               /// </summary>               ~Form1()               {                      if (components)                      {                             delete components;                      }               }          private:               /// <summary>               /// 必需的设计器变量               /// </summary>               System::ComponentModel::Container ^components;   //////////////////控件属性描述 #pragma region Windows Form Designer generated code               /// <summary>               /// 设计器支持所需的方法不要               /// 使用代码编辑器修改此方法的内容               /// </summary>               void InitializeComponent(void)               {                      this->SuspendLayout();                      //                      // Form1                      //                      this->AutoScaleDimensions = System::Drawing::SizeF(6, 12);                      this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;                      this->ClientSize = System::Drawing::Size(284, 262);                      this->Name = L"Form1";                      this->Text = L"Form1";                      this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);                      this->ResumeLayout(false);                 } ///////////////////////////////////////////////////   #pragma endregion        private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {                             //添加事件代码                       }        }; }     C#风格   ///////////////导入命名空间 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;             ///////////////////   ///////////声明命名空间 namespace WindowsFormsApplication1 { public partial class Form1 : Form         ///声明类(分部类)     {         string address;    //定义公共变量         public Form1()         {             InitializeComponent();             address = Environment.CurrentDirectory;    //初始化公共变量         }           private void Form1_Load(object sender, EventArgs e)      //事件代码?         {           }     } }             ·         控件(类)、方法、属性、事件   l  常用Form控件及其专有属性  控件 专有 属性 方法 事件  Form StartPosition(窗体初现位置)  IsMdiContainer(是否为MDI父窗体)  MdiParent(MDI父窗体)  MdiChild(MDI子窗体)    AcceptButtons(窗体接受按钮)  Opaciaty(透明度) Controls->Add()    Close    Load    Activated  TextBox类 ReadOnly(只读)   WordWrap(自动换行)   SelectionFont(选中文本字体)   SelectionLength (选中文本长度) TextLength(所有文本长度)   CanSelect(能否选中控件)   CanUndo(能否撤销)  CanRedo(能否恢复) Clear()(新建)   Cut()(剪切)    Copy()(复制)    Paste()(粘贴)   Find()(查找)   Select()(选择文本)   SelectAll()(全选)   Undo()(撤销)   Redo()(恢复)    TextChange(Text属性改变) MenuStrip &ContextMenuStrip Checked(能否复选)   ShortCutKeys (快捷键) OpenFileDialog &SaveFileDialog DefaultExt(默认文件格式)   RestoreDirectory(保存上次目录) InitialDirectory(初始目录)   MultiSelect(能否选择多个文件) PrintDialog &PrintDocument &PrintPreviewControl &PrintPreviewDialog &PageSetupDialog Document(文档)    AllowPrintToFile(打印到文件)   ShowNetwork(显示网络)     AllowPrinter(启用和禁用打印机选择)       AllowPaper(启用和禁用纸张选择) FontDialog &ColorDialog AllowFullOpen(启用和禁用自定义颜色)   ShowApply(显示“应用”) ShowColor(显示颜色选项)   ShowEffects(显示 加粗、倾斜等选项) (Link)Label & Button FlatStyle(外观)  Timer Interval(时钟周期)    Tick 其他控件 RadioButton(单选框)  &  CheckBox(复选框)  &  ScrollBar(滚动条)  &  TabControl(选项卡)  &  NotifyIcon(托盘图标)    &  PictureBox(图形框)  &  ProgessBar(进度条)     l  Form公共属性、方法、事件 公共属性 Name(名称)  Dock(停靠)  Anchor(锚定)   Location(位置)  Size(大小)   BackColor(背景颜色)  ForeColor(前景颜色)   Font(字体)   Text(显示文本)   TextAlign(文本对齐方式)     (Form)BorderStyle(边框样式)   TabIndex(Tab键顺序)  Enabled(可用性)  Visible(可见性)  Cursor(鼠标样式)   CanFocus (能否接受输入焦点)    AutoSize(自动调整大小)  Locked(锁定控件)    AllowDrop(能否接受鼠标拖到上面的数据)    Image(背景图像)  公共方法 DateTime::Now(获取系统时间)        MessageBox::Show()(显示对话框)    Focus()(获取输入焦点)   ToString()(转换为字符串)  ToInt()(转换为整型)    ToBoolean() (转换为布尔型) 公共事件 Click(点击)    MouseDown(按下鼠标键)    MouseUp(释放鼠标键)   KeyPress(按下并释放键)           ·         语法 由于C++/CLI语法与C#差别极小,故此处语法以C++/CLI为主。 ·         1.     变量类型 C++/CLI 和C#的类型分为  值类型、引用类型和指针类型,值类型和指针类型想必大家都有了解。引用类型包含对象(Object)、字符串(String)和数组(array)类型。 在C++/CLI中声明引用类型时必须在数据类型右侧角括号加上追踪句柄 “^”,实例化对象时必须必须使用gcnew运算符,且在对象名左侧加上追踪句柄”^”。此外通过对象访问成员,必须利用”->”访问。(CLR) 而在C#中声明类型一律不使用追踪句柄”^”,实例化对象全部使用new运算符。访问成员则一律利用”.”运算符。由于.NET的共通性,其属性、方法和事件与C++/CLI基本一致。 由于C++/CLI语句改到C# 较易,故下文无特别声明则全部使用C++/CLI风格语法。   ·         2.     声明类型 Form^ About=gcnew Form();           //声明一个窗体 TextBox^ txtFind=gcnew TextBox();               //声明一个文本框 String ^str1,^str2;            //声明两个字符串   ·         3.     声明数组 控件数组 array<int>^ index=gcnew array<int>(5,8);           //二维整型数组 array<String^>^ str=gcnew array<String^>(8);          //字符串数组 array<Label^>^ lblMine=gcnew array<Label^>(256);          //控件数组 想必初始化大家都会,当然是使用 for 循环。     ·         4.     控件属性描述语法 menuStrip->Location = System::Drawing::Point(0, 0);      //定义位置 menuStrip->Size = System::Drawing::Size(344, 25);         //定义大小 btnMine[i]->Font=(gcnew System::Drawing::Font(L"微软雅黑", 10.5F, FontStyle::Regular, GraphicsUnit::Point,static_cast<System::Byte>(134)));           //定义字体 btnMine[index]->BackColor=System::Drawing::SystemColors::MenuHighlight;    //定义系统颜色 btnMine[index]->BackColor=System::Drawing::Color::Red;         //定义颜色   ·         5.     关键语句 有些语句感觉就像与人打招呼一样,没有多大的创新可以再被提出,大家更多的是模仿。我觉得对于这些代码只需要理解并记住就行了,不必研究那么透彻,但又很常用,不得不管。故列下一些来,以备以后改用。   打开文档 String^ ptrfile;             //用来存储文件地址和文件名 ……     dlgOpenFile->Filter="文本文档(*.txt)|*.txt|程序文件(*.c,*.cpp,*.h,*.cs,*.xml)|*.c;*.cpp;*.h;*.cs,*.xml| 所有文件 (*.*)|*.*";        dlgOpenFile->DefaultExt="*.txt";        dlgOpenFile->FileName="";        dlgOpenFile->RestoreDirectory=true;        if(dlgOpenFile->ShowDialog()==System::Windows::Forms::DialogResult::OK){               ptrfile=dlgOpenFile->FileName;               rtbShow->LoadFile(ptrfile,RichTextBoxStreamType::PlainText);               this->Text=String::Concat(ptrfile,"-NotePad");          //更换标题栏标题        }     保存文档 if(ptrfile==nullptr){        tsmSaveAs_Click(sender,e);           //调用另存为        return; } else{        System::IO::StreamWriter^ sw=gcnew System::IO::StreamWriter(ptrfile,false,System::Text::Encoding::Default);        sw->Write(rtbShow->Text);        sw->Close(); }   打印 dlgPrint->Document=Document;     //Document为PrintDocument实例化对象 if(dlgPrint->ShowDialog()==System::Windows::Forms::DialogResult::OK){        Document->Print(); }   Document部分代码存在着业已知晓的Bug,大家用用就知道了   System::Drawing::Font^ PrintFont=gcnew System::Drawing::Font(rtbShow->Font->ToString(),15,System::Drawing::FontStyle::Regular); e->Graphics->DrawString(rtbShow->Text,PrintFont,System::Drawing::Brushes::Black,15,dlgPageSetup->PageSettings->Landscape);   剪切 if(!rtbShow->SelectedText->Equals("")){        rtbShow->Cut();        IDataObject^ buff2=Clipboard::GetDataObject(); }   复制 rtbShow->Copy();   粘贴 if(Clipboard::GetDataObject()->GetDataPresent(DataFormats::Text)==true){        rtbShow->Paste(); }   字体 dlgFont->ShowColor=true; dlgFont->Font=rtbShow->SelectionFont; dlgFont->Color=rtbShow->SelectionColor; if(dlgFont->ShowDialog()==System::Windows::Forms::DialogResult::OK){         rtbShow->SelectionFont=dlgFont->Font;         rtbShow->SelectionColor=dlgFont->Color; }     ·         6.     与新添加项的联动 在C++/CLI中此项内容至今未取得突破,也请高手指点 反倒是在C#成功实现了部分此功能,却未能成功调用父窗体的方法 下面是我在C#记事本中调用关于窗口的语句,About是新加的Form类。 Form  fomAbout = new About ();   ///此处也可写为 About  fomAbout = new About ();   fomAbout.Show();     ·         7.      事件 EventArgs MouseEventArgs   ///添加Click事件 this->tsmNew->Click += gcnew System::EventHandler(this, &Form1::tsmNew_Click);   ///添加MouseUp事件,MouseDown事件同理 btnMine[i]->MouseUp+=gcnew System::Windows::Forms::MouseEventHandler(this,&Form1::Mine_MouseUp);   ///添加Load事件 this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);     ///Mine_Click事件代码 private: System::Void Mine_Click(System::Object^ sender, System::Windows::Forms:: EventArgs^ e) {                //添加事件代码 }   ///Mine_MouseUp事件代码 private: System::Void Mine_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {                //添加事件代码 }   ///Form1_Load事件代码 private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {               //添加事件代码                                          }   外:前瞻 Windows Vista及 Win 7的普及使得微软的WPF成为之后Windows平台软件界面(UI)开发的必备利器。而新的平台意味着新的学习,WPF中的控件和属性与Win Form 相去甚远。很多东西我们都不得不重新学习……而针对API以及各种Web服务统一化的WCF同样展现出巨大的潜力和能力,配合WPF一定很强大。但是,没有一定的基础很难理解WCF中的概念。我看过很长时间的WCF,可先有收获。 现在伴随着网络的发展,Web服务已经无处不在。很多单机的软件已经开始向网络迁移,网络软件同样表现出强大的生命力和潜力。而且相比单机软件,网络服务利润率更高,商机更大,盗版更难。我们就更要学好WCF以及ASP,还有HTTP语言。 当然,不管要做以上哪个,只要稍大些的软件(Application),都少不了数据库。所以,MS的易上手的SQL就摆在了我们的面前……  


上一篇:没有了

下一篇:AI赋能,蔚来发布多项创新科技成果