欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

探索Visual C++下創(chuàng)建WPF項目的方法示例

 更新時間:2020年07月02日 08:29:51   作者:大白技術(shù)控  
這篇文章主要介紹了探索Visual C++下創(chuàng)建WPF項目的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

C++/CLI 下創(chuàng)建WPF項目的方法

由于WPF不僅僅支持C#/VB開發(fā),還支持其他語言,比如: C++、F#等開發(fā),于是大白我最近花了點時間摸索了一下,本文主要介紹 C++/CLI 下創(chuàng)建WPF項目的方法。

我使用的開發(fā)環(huán)境是: Win10 x64 + Visual Studio 2019 (16.6.1版本)。

今天我們需要使用 C++/CLI ,算是C++的一個子集吧。

要能正常使用 C++/CLI ,首先需要確保你安裝了 C++/CLI build套件(見下圖),同時還需要確保你安裝好了Visual C++相應(yīng)版本的運行庫。

進入 控制面板 ,找到 Visual Studio 2019,右擊"修改",然后切換到"獨立組件"(Individual components)這個選項卡。

如果沒安裝,勾選后安裝一下即可。

接下來我們可以創(chuàng)建項目了,建議選用模板 CLR Empty Project (.NET Framework) ,解決方案和項目名可以都用 CppWpfDemo

這時一個空項目就創(chuàng)建完成了。

此時查看 Project的屬性, Configration Properties -> "C/C++" -> "All Options",輸入 "common"進行搜索,確保選中的是 Common Language Runtime Suppor(/clr) .

接下來我們鼠標(biāo)右擊項目下的文件夾"Resource Files",點"Add" -> "new item",類型選"Component Class",可使用默認的名字 MyComponent 。

此時, MyComponent.cpp 中的代碼如下:

#include "MyComponent.h"

為了正確引用到 WPF 中的各種庫,我們還需要加入 WPF中 3 個核心的 dll,操作方法是:

右鍵點擊項目中的 References ,然后點 Add Reference ,勾選上:

  • PresentationCore
  • PresentationFramework
  • WindowsBase

接下來,進行了一番倒騰,我改成了這個,做成了一個簡單的界面:

此時 MyComponent.cpp 的內(nèi)容如下:

#include "MyComponent.h"

using namespace CppWpfDemo;
using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace System::Windows::Media;

[System::STAThreadAttribute]
int main(array<System::String^>^ args)
{
  Application^ app = gcnew Application();
  Window^ window = gcnew Window();
  window->Title = "C++/CLI WPF demo";

  TextBlock^ tb = gcnew TextBlock();
  tb->Text = "Hello WPF";

  // Add root Grid
  Grid^ rootGrid = gcnew Grid();
  rootGrid->Width = 120;
  rootGrid->Height = 120;
  RowDefinition^ myRowDef1 = gcnew RowDefinition();
  rootGrid->RowDefinitions->Add(myRowDef1);

  DataGrid^ grid = gcnew DataGrid();
  grid->Background = Brushes::LightBlue;
  grid->Width = 80;
  grid->Height = 100;

  // Define the Canvas
  Canvas^ mainCanvas = gcnew Canvas();
  mainCanvas->Children->Add(tb);
  mainCanvas->Children->Add(grid);

  Canvas::SetTop(tb, 20);
  Canvas::SetLeft(tb, 20);

  Canvas::SetTop(grid, 50);
  Canvas::SetLeft(grid, 20);

  rootGrid->Children->Add(mainCanvas);
  Grid::SetRow(mainCanvas, 0);

  window->Content = rootGrid;
  app->Run(window);

  return 0;
}

代碼中的 [STAThread] 是需要的,等價于 [System::STAThread][System::STAThreadAttribute] .

還有個朋友說需要在項目屬性中設(shè)置"Entry Point"的值為"main",測試過了填與不填沒影響,建議別填。

接下來,可以build了。

如果出現(xiàn) VCRUNTIME140.dll missing 的問題,安裝一下Visual C++ Redistributable for Visual Studio 2015 Microsoft Visual C++ 2015 Redistributable Update 3 RC 可以解決,x64和x86的運行庫都需要安裝。

如果還不行,

  • 下載VCRUNTIME140.DLL
  • 以管理員權(quán)限復(fù)制這個 dll 到 C:\Windows\System32
  • 檢查該 dll 的文件讀寫權(quán)限是否為 只讀 ,如果是只讀,去掉前面的勾勾.

此時按F5(或 Ctrl + F5),運行結(jié)果如下:

美中不足的是后面一直有個命令行窗口。

網(wǎng)上找了下解決方案,發(fā)現(xiàn)將目前用的 int main() 改為 int WINAPI WinMain() 可以解決,要能使用 WinMain() 則需要引入 windows.h 頭文件。

當(dāng)把 #include windows.h 加到 #include "MyComponent.h" 下一行時,發(fā)現(xiàn)如下錯誤:

原因在于命令空間沖突,使得 Window 的引用出現(xiàn)起義。

解決方法是: 將 #include windows.h 放在代碼的第一行。

此時,此時 MyComponent.cpp 的內(nèi)容如下:

#include "windows.h"
#include "MyComponent.h"

using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace System::Windows::Media;

[STAThread]
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  LPSTR lpCmd, int nCmd)
{
  Application^ app = gcnew Application();
  Window^ window = gcnew Window();
  window->Title = "C++/CLI WPF demo";

  TextBlock^ tb = gcnew TextBlock();
  tb->Text = "Hello WPF";

  // Add root Grid
  Grid^ rootGrid = gcnew Grid();
  rootGrid->Width = 120;
  rootGrid->Height = 120;
  RowDefinition^ myRowDef1 = gcnew RowDefinition();
  rootGrid->RowDefinitions->Add(myRowDef1);

  DataGrid^ grid = gcnew DataGrid();
  grid->Background = Brushes::LightBlue;
  grid->Width = 80;
  grid->Height = 100;

  // Define the Canvas
  Canvas^ mainCanvas = gcnew Canvas();
  mainCanvas->Children->Add(tb);
  mainCanvas->Children->Add(grid);

  Canvas::SetTop(tb, 20);
  Canvas::SetLeft(tb, 20);

  Canvas::SetTop(grid, 50);
  Canvas::SetLeft(grid, 20);

  rootGrid->Children->Add(mainCanvas);
  Grid::SetRow(mainCanvas, 0);

  window->Content = rootGrid;
  app->Run(window);

  return 0;
}

而運行結(jié)果為:

大白今天躺坑完畢,總算解決了問題,先醬~

第一個版本代碼已上傳到 github : https://github.com/yanglr/CppWpfDemo/tree/master/CppWpfDemo/CppWpfDemo .

到此這篇關(guān)于Visual C++下創(chuàng)建WPF項目的方法探索的文章就介紹到這了,更多相關(guān)Visual C++下創(chuàng)建WPF項目的方法探索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言詳細講解通過遞歸實現(xiàn)掃雷的展開

    C語言詳細講解通過遞歸實現(xiàn)掃雷的展開

    windows自帶的游戲《掃雷》是陪伴了無數(shù)人的經(jīng)典游戲,本文將利用C語言實現(xiàn)這一經(jīng)典的游戲,文中的示例代碼講解詳細,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • C++面試八股文之智能指針詳解

    C++面試八股文之智能指針詳解

    智能指針是C++11引入的類模板,用于管理資源,行為類似于指針,但不需要手動申請、釋放資源,本文主要為大家介紹了它的相關(guān)知識,需要的可以參考一下
    2023-06-06
  • C語言goto語句簡單使用詳解

    C語言goto語句簡單使用詳解

    C語言中提供了可以隨意濫用的 goto語句和標(biāo)記跳轉(zhuǎn)的標(biāo)號,本文主要介紹了C語言goto語句簡單使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++中的字符串(1)

    C++中的字符串(1)

    這篇文章主要簡單介紹C++中的字符串,字符串就是連續(xù)的一連串字符,在C++當(dāng)中, 處理字符串的方式有兩種類型。一種來自于C語言,也被稱為C風(fēng)格字符串。另外一種是基于string類庫,下面來看文章學(xué)校內(nèi)容
    2021-11-11
  • C語言單鏈表實現(xiàn)多項式相加

    C語言單鏈表實現(xiàn)多項式相加

    這篇文章主要為大家詳細介紹了C語言單鏈表實現(xiàn)多項式相加,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 簡單談?wù)凜++ 頭文件系列之(bitset)

    簡單談?wù)凜++ 頭文件系列之(bitset)

    我們要使用bitset,首先需要包含頭文件bitset。和vector對象不一樣的是bitset類型對象的區(qū)別僅在其長度而不在其類型。在定義bitset的時候,要明確bitset包含了多少位,須在尖括號內(nèi)給出它的長度值。長度值必須定義為整形字面值常量或是已用常量值初始化的整型的const對象
    2017-02-02
  • Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序

    Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序

    這篇文章主要介紹了Windows系統(tǒng)下使用C語言編寫單線程的文件備份程序,文中給出了實現(xiàn)的幾個關(guān)鍵代碼片段,剩下的只要套上main和線程調(diào)用的相關(guān)函數(shù)即可,非常詳細,需要的朋友可以參考下
    2016-02-02
  • C語言實現(xiàn)簡易掃雷游戲

    C語言實現(xiàn)簡易掃雷游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++如何在變量前面加#

    C++如何在變量前面加#

    這篇文章主要介紹了C++如何在變量前面加#問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 使用C++實現(xiàn)工資管理中的隨機教師信息生成功能

    使用C++實現(xiàn)工資管理中的隨機教師信息生成功能

    這篇文章主要介紹了使用C++實現(xiàn)工資管理中的隨機教師信息生成功能,想要做一個教師工資管理系統(tǒng),就必須得準(zhǔn)備好數(shù)據(jù),但是這些數(shù)據(jù)如果用手一行一行地敲,那么工作量是非常大的,因此,我就產(chǎn)生了用C語言實現(xiàn)直接生成大量的教師基本信息的想法,需要的朋友可以參考下
    2023-05-05

最新評論