• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VC++.NET中使用Windows.Forms

    發表于:2007-05-25來源:作者:點擊數: 標簽:VC++.NET使用
    熟悉Virsual Basic 開發 方式的朋友們在使用Visual C++時,一定發過這樣的牢騷:“為什么不能自己設計窗體,為什么不能手動畫控件?這能叫Visual(可視化)嗎?你看人家 Borland C++…… ”的確,制作一個控件豐富的主窗體在以往是件比較繁重的工作,不過這
    熟悉Virsual Basic開發方式的朋友們在使用Visual C++時,一定發過這樣的牢騷:“為什么不能自己設計窗體,為什么不能手動畫控件?這能叫Visual(可視化)嗎?你看人家Borland C++…… ”的確,制作一個控件豐富的主窗體在以往是件比較繁重的工作,不過這樣的境況,在 Visual Studio.NET 中已經有所改善了。在本文中,筆者就將和大家一起領略一下期望中的輕松和愉快。


      還記得過去用VC++創建一個窗體的過程么,它意味著相對不少的代碼描述一個窗體類(或應用程序類)的對象,每個屬性的設置都要對應著一行賦值語句。如果是用Windows API,需要自己書寫主事件循環。至于圖標、位圖什么的還要作為資源去調用。想添加控件就比較麻煩了。首先,你要有一本MFC大全,照著它來添加各種控件類的實例,截取它用到的各種Windows消息……這些也就是對于VC++制作窗口程序,筆者沒學下去的原因。


      這兩天鼓搗VC++.NET,才發現原來這里的VC++也可以使用窗口編輯器。筆者這就帶著大家一起用它來創建一個窗口。我們還是從經典的“Hello,World”開始。


      我們應該創建一個Windows Form Application(.NET)(Windows窗口應用程序)類型的工程。這里將它命名為HelloWorld。



      單擊“OK”確定,我們看到.NET為我們自動創建了一個主窗體Form1??梢钥吹阶竺娴奈募斜砝?,仍然是傳統的源文件、頭文件和資源,稍有一點變化的就是該Form1的頭文件,筆者稍候會詳細說明,其實我們以往要做的工作都被封裝在這個頭文件里。呈現在我們面前的已不再是VC++傳統的代碼編輯界面,而是一個窗口編輯界面。



      讀者的開發環境如果使用的是Visual C++6.0的界面風格的話,還看不到最重要的控件條(ToolBox),要在菜單項“視圖(View)-〉工具箱(ToolBox)”中把它點開。我們看到了令人興奮的一個個控件,你可以隨意在上面畫畫控件爽幾下,然后我們繼續。托拽出一個Button和一個Label,我想這對你來說都應該不陌生。右鍵單擊它們的任何一個,選擇菜單的最后一項Properties把屬性列表叫出來(應該就出現在文件列表的下面),你可以編輯它們的屬性,再也不必去寫語句了。試著給咱們的程序換個圖標,不用再麻煩地調用資源了,很容易了不是?



      保持良好的命名習慣,我將它倆命名為btnSay和lblShow。開始添加代碼了,雙擊btnSay,進入代碼界面,光標會自動跳轉至按鈕單擊事件處,其他的東西可以一概不管,只需要在這里添加上代碼


    this->lblShow->Text = "Hello,the World!";


      我想該做得也就這么多了(有點像VB了不是?)畢竟是C++,得編譯。按Ctrl+F5編譯鏈接運行,結果如圖:



      真正的C++程序員這時會思考代碼是怎樣被組織封裝的。我們先來看看文件的組織形式。這里依然是使用資源的形式來用圖標、菜單什么的,因此這里有同以往一樣的*.rc和resource.h。工程的主體是Form1.h/cpp文件對,主程序也在里面。不過主程序似乎是一空殼,真正的窗體對象信息都在Form1.h里。它現在給我們呈現出一副可視化設計器的姿態,我們右鍵點擊它,在彈出的對話框中選擇第二項



      終于揭開了它的神秘面紗,看到了隱藏在背后的代碼。(有點故弄玄虛了,其實剛才你編寫代碼時就已經見到它了。這令我也很詫異,頭文件里居然會有執行代碼?。┻€有一點要說的,剛才你是不是找不到在那兒修改Form1對象的名字?在代碼界面的屬性列表里就能改了。我把它改稱frmMain。





      程序為你定義了一個命名空間HelloWorld,命名空間可以簡單的理解為完成相似功能的類的集合。在這里,就是該空間里的類共同為程序"HelloWorld"“賣力氣”。之后的一些using namespace xxx;語句表示將要使用到System空間里的這些類,都是已定義好的。之后的代碼


    public __gc class frmMain : public System::Windows::Forms::Form
    {
     public:
     frmMain(void)
     {
      InitializeComponent();
     }


     protected:
     void Dispose(Boolean disposing)
     {
      if (disposing && components)
      {
       components->Dispose();
      }
      __super::Dispose(disposing);
     }
     private: System::Windows::Forms::Button * btnSay;
     private: System::Windows::Forms::Label * lblShow;
     private:
     ///
     /// Required designer variable.
     ///
     System::ComponentModel::Container * components;


     ///
     /// Required method for Designer support - do not modify
     /// the contents of this method with the code editor.
     ///
     void InitializeComponent(void)
     {
      this->btnSay = new System::Windows::Forms::Button();
      this->lblShow = new System::Windows::Forms::Label();
      this->SuspendLayout();
      //
      // btnSay
      //
      this->btnSay->Location = System::Drawing::Point(72, 152);
      this->btnSay->Name = S"btnSay";
      this->btnSay->Size = System::Drawing::Size(144, 24);
      this->btnSay->TabIndex = 0;
      this->btnSay->Text = S"Say Hello";
      this->btnSay->Click += new System::EventHandler(this, button1_Click);
      //
      // lblShow
      //
      this->lblShow->Font = new System::Drawing::Font(S"SimSun", 15,       System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, (System::Byte)134);
      this->lblShow->ForeColor = System::Drawing::SystemColors::Desktop;
      this->lblShow->Location = System::Drawing::Point(48, 56);
      this->lblShow->Name = S"lblShow";
      this->lblShow->Size = System::Drawing::Size(192, 24);
      this->lblShow->TabIndex = 1;
      //
      // frmMain
      //
      this->AutoScaleBaseSize = System::Drawing::Size(6, 14);
      this->ClientSize = System::Drawing::Size(292, 273);
      this->Controls->Add(this->lblShow);
      this->Controls->Add(this->btnSay);
      this->Name = S"frmMain";
      this->Text = S"Form1";
      this->ResumeLayout(false);


     }



     private: System::Void button1_Click(System::Object * sender, System::EventArgs * e)
     {
      this->lblShow->Text = "Hello,the World!";
     }


    };


      是對Form1類的完整定以及實現??梢钥吹?,我們向窗體加進來的控件成為了它的成員變量,類型就是相應控件類的指針。因此在代碼中引用控件時,要指明“this->”。窗體的構造函數中調用了void InitializeComponent(void),負責初始化所有的控件和主窗體。這些賦值語句就對應著設計界面上你在屬性列表里做的修改動作,實際上這種在初始化時給屬性賦值的做法同以往完全一樣。你可以在這里直接修改某某控減的某某值。注意


    this->btnSay->Click += new System::EventHandler(this, button1_Click);


      btnSay->Click是指按鈕的Click事件,button1_Click就是后面那個處理單擊事件的成員函數的指針。這就如同傳統的WindowProc()函數一樣,系統截獲事件后,會調用你指定的函數處理。這一行就是將該函數與系統預留的回調函數綁定。要處理控件的其他事件,以同樣的方式將你的事件處理函數指針賦給Ctrl->Event(Ctrl代表任意控件,Event代表任意事件)。你會發現,當我們在設計界面雙擊某一控件時,會自動加入類似上面的代碼,并等待你添加它的函數體,也就是事件處理過程,而自動添加的都是其默認事件,如按鈕的Click,窗體的Load等。這樣很類似于VB的工作方式。


      上面筆者簡單地將代碼和設計聯系了起來,下面說說更有意思的。有兩件事一直是實現VC++窗體很頭疼的,就是圖片和菜單?,F在有了熟悉的PictureBox控件,圖形變得簡單了一些。菜單的編輯更加簡單。向窗體添加一個MainMenu控件,點擊那個灰色的"TYPE HERE"輸入菜單項,雙擊已編輯好的項目就可以編寫菜單事件了,比起原來作為資源來添加,既直觀又不容易錯。我想你會大聲高呼:“這就是個VB!”的確,我也這么想。



      說了這么多,你會猜到程序設計變得如此方便的同時就會有什么東西作為代價了,對,那一定就是性能。C++在同類語言中一向是以性能著稱的,正是因為C++程序員能夠對整個程序進行靈活的控制,才使其具有高性能,不管是在類的設計、程序流程還是內存管理等等方面。因此有時候繁重的工作量是必需的?,F在代碼被封裝了,方便的同時也存在降低性能的可能性。但對于一般的應用程序來說,這倒是不算什么問題。畢竟高效率的開發方式是很容易讓人接受的。


    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>