Visual C++에서 WPF 프로젝트 를 만 드 는 방법 예제 탐색

7387 단어 VisualC++WPF
C++/CLI 에서 WPF 프로젝트 를 만 드 는 방법
WPF 는 C\#/VB 개발 뿐만 아니 라 다른 언어 도 지원 하기 때문에 예 를 들 어 C+,F\#등 개발 도 지원 합 니 다.그래서 저 는 최근 에 시간 을 들 여 모색 해 봤 습 니 다.본 고 는 주로C++/CLI에서 WPF 프로젝트 를 만 드 는 방법 을 소개 합 니 다.
제 가 사용 하 는 개발 환경 은 Win 10 x64+Visual Studio 2019(16.6.1 버 전)입 니 다.
오늘 우 리 는C++/CLI을 사용 해 야 한다.C++의 키 집합 이 라 고 할 수 있다.
정상적으로 사용 하려 면C++/CLIbuild 세트(아래 그림 참조)가 설치 되 어 있 는 지 확인 하 는 동시에 Visual C+해당 버 전의 런 타임 라 이브 러 리 도 설치 되 어 있 는 지 확인 해 야 합 니 다.C++/CLI에 들 어가 서 Visual Studio 2019 를 찾 고'수정'을 우 클릭 한 다음'독립 구성 요소'(Individual components)라 는 옵션 으로 전환 합 니 다.

만약 설치 하지 않 았 다 면,선택 한 후에 설치 하면 된다.
다음은 프로젝트 를 만 들 수 있 습 니 다.템 플 릿 을 선택 하 는 것 을 권장 합 니 다.솔 루 션 과 프로젝트 이름 은 모두 사용 할 수 있 습 니 다CLR Empty Project (.NET Framework).

이 때 빈 항목 이 생 성 되 었 습 니 다.
이때 Project 의 속성 을 보고CppWpfDemo->"C/C++"->"All Options"를 입력 하여 검색 하여 선택 한 것 이Configration Properties인지 확인 합 니 다.

다음 항목 아래 폴 더'Resource Files'를 마우스 우 클릭 하고'Add'->'new item'을 누 르 십시오.형식 은'Component Class'를 선택 하고 기본 이름Common Language Runtime Suppor(/clr)을 사용 할 수 있 습 니 다.

이때MyComponent의 코드 는 다음 과 같다.

#include "MyComponent.h"
WPF 의 각종 라 이브 러 리 를 정확하게 인용 하기 위해 서 는 WPF 의 3 개 핵심 dll 을 추가 해 야 합 니 다.조작 방법 은:
오른쪽 키 로 항목 중MyComponent.cpp을 클릭 하고References을 누 르 고 선택:
  • PresentationCore
  • PresentationFramework
  • WindowsBase

  • 그 다음 에 후진 을 했 습 니 다.저 는 이것 으로 바 꾸 어 간단 한 화면 을 만 들 었 습 니 다.
    이때Add Reference의 내용 은 다음 과 같다.
    
    #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;
    }
    코드 중의MyComponent.cpp은 필요 하 며,등가[STAThread]또는[System::STAThread]이다.
    또 한 친 구 는 프로젝트 속성 에'Entry Point'의 값 을'main'으로 설정 해 야 한다 고 말 했다.채 워 넣 는 것 과 안 채 우 는 것 은 영향 이 없 는 지 테스트 해 봤 으 니 쓰 지 말 것 을 권장 했다.

    이제 build 할 수 있 습 니 다.
    만약 에[System::STAThreadAttribute]문제 가 발생 하면 설치Visual C++ Redistributable for Visual Studio 2015Microsoft Visual C++ 2015 Redistributable Update 3 RC를 하면 해결 할 수 있 고 x64 와 x86 의 운행 라 이브 러 리 는 모두 설치 해 야 한다.
    만약 아직 안 된다 면,
  • VCRUNTIME 140.DLL
  • 다운로드
  • 관리자 권한 으로 이 dll 을VCRUNTIME140.dll missing
  • 로 복사 합 니 다.
  • 이 dll 의 파일 읽 기와 쓰기 권한 이C:\Windows\System32인지 확인 하고 읽 기 전용 이 라면 앞의 체크 를 제거 합 니 다.
  • 이 때 F5(또는 Ctrl+F5)를 누 르 면 다음 과 같이 실 행 됩 니 다.

    옥 에 티 는 뒤에 명령 행 창 이 계속 있 습 니 다.
    인터넷 에서 해결 방안 을 찾 아 보 니 현재 사용 하고 있 는 int main()으로 바 꾸 면 해결 할 수 있 고,사용 할 수 있 으 려 면int WINAPI WinMain()헤더 파일 을 도입 해 야 한다.WinMain()windows.h다음 줄 에 추가 하면 다음 과 같은 오류 가 발생 합 니 다.

    명령 공간 충돌 로#include windows.h인용 에 봉기 가 일 어 났 기 때문이다.
    해결 방법 은 코드 의 첫 줄 에#include "MyComponent.h"두 는 것 이다.
    이때Window의 내용 은 다음 과 같다.
    
    #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;
    }
    실행 결 과 는:

    대 백 이 는 오늘 구덩이 에 누 워 서 문 제 를 해결 했다.먼저 장~
    첫 번 째 버 전 코드 가 업로드 되 었 습 니 다#include windows.h:https://github.com/yanglr/CppWpfDemo/tree/master/CppWpfDemo/CppWpfDemo.
    Visual C++에서 WPF 프로젝트 를 만 드 는 방법 에 대한 탐색 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Visual C++에서 WPF 프로젝트 를 만 드 는 방법 에 대한 탐색 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

    좋은 웹페이지 즐겨찾기