日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++开发WPF,Step by Step

發布時間:2023/11/30 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++开发WPF,Step by Step 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

C++開發WPFStep by Step

示例代碼

使用C++來開發WPF,主要是如何在MFCWin32)的窗口中Host WPFPage。下面我就做個詳細的介紹.

一、創建工程, 由于MFCWizard會生成很多用不到的代碼,所以我準備從一個空的工程開始創建一個MFC的工程。

a)???????? 打開VS2005,菜單File->New->Projects…, 左面選擇Visual C++->Win32,右面選擇Win32 Console Application,給工程起個名字CPlusPlus_WPF, Ok進入下一步。見Figure 1

Figure 1 Create Project 1

b)??????? 工程基本配置,在Application Setting中選擇Console ApplicationMFC.Finish進入下一步。見Figure 2

Figure 2 Application Setting

c)??????? 修改工程,使工程變成MFC Windows程序。

?????????????????????????????????????? i.????????????? 刪除CPlusPlus_WPF.cppCPlusPlus_WPF.h文件


Figure 3 Remove no used files

???????????????????????????????????? ii.????????????? 添加CWinApp派生類, 在工程上點擊鼠標右鍵,Add=>Class…


Figure 4 Add New Class Menu

???????????????????? 在彈出的對話框中,左邊選擇MFC,右面選擇MFC Class,點擊Add進入下一步


Figure 5 Create New Class Dialog

????????????? 在彈出的對話框中輸入類名: CCPlusPlus_WPFApp, 基類選擇CWinApp


Figure 6 Add CWinApp Derived Class

?

?????????????????????????????????????? i.????????????? 用同上的方法添加CWnd派生類,Class nameCCPlusPlus_WPFMainWnd, Base classCWnd

???????????????????????????????????? ii.????????????? 修改工程屬性。將屬性中的System->SubSystemConcole改成Windows,見Figure 7

??
?

Figure 7 Change property

到這一步,一個基本的MFC程序所需要的兩個類CWinAppCWnd派生類就添加完了。我們的程序可以順利編譯通過,但是還不能運行,請繼續看下一步

d). CCPlusPlus_WPFMainWnd添加代碼;
???
l???????? 添加創建窗口函數,函數如下:

BOOL?CCPlusPlus_WPFMainWnd::CreateMainWnd(const?CRect?&rect,?DWORD?dwStyle,?DWORD?dwStyleEx)
{
????WNDCLASS?wndClass;
????memset(
&wndClass,?0,?sizeof(WNDCLASS));????????????????????????????????????????????
????wndClass.style?
=?CS_HREDRAW?|?CS_VREDRAW?|?CS_DBLCLKS;
????wndClass.lpfnWndProc?
=?::DefWindowProc;?
????wndClass.hInstance?
=?AfxGetInstanceHandle();
????wndClass.hIcon?
=?NULL;
????wndClass.hCursor?
=?::LoadCursor(NULL,?IDC_ARROW);
????wndClass.hbrBackground?
=?(HBRUSH)(COLOR_WINDOW);
????wndClass.lpszMenuName?
=?NULL;
????wndClass.lpszClassName?
=?_T("__CPlusPlus_WPF_MainWnd__");

????
if(!AfxRegisterClass(&wndClass))
????
{
????????
return?FALSE;
????}


????
return?CWnd::CreateEx(dwStyleEx,?wndClass.lpszClassName,?_T("C++?&&?WPF"),?dwStyle,?0,?0,?rect.Width(),?rect.Height(),?NULL,?NULL);
}

l???????? 繼承CWnd類的PostNcDestroy函數,這個函數是CWnd類中的虛函數,是在窗口退出后,最后一個被調用的函數,我們在這個函數里還刪除自己。

void?CCPlusPlus_WPFMainWnd::PostNcDestroy()
{
????delete?
this;
}

?????????????

e)?????? CCPlusPlus_WPFApp添加代碼

l???????? 把構造函數改由protect改為public

l???????? 定義theApp, CCPlusPlus_WPFAp theApp

l???????? 實現InitInstance()

?

BOOL?CCPlusPlus_WPFApp::InitInstance()
{
????CWinApp::InitInstance();

????CCPlusPlus_WPFMainWnd?
*pMainWnd?=?new?CCPlusPlus_WPFMainWnd();
????
if?(!pMainWnd->CreateMainWnd(CRect(0,?0,?800,?600),?WS_OVERLAPPEDWINDOW,?0))
????????
return?FALSE;

????m_pMainWnd?
=?pMainWnd;

????pMainWnd
->CenterWindow();
????pMainWnd
->ShowWindow(SW_SHOW);
????pMainWnd
->UpdateWindow();

????
return?TRUE;
}

????????編譯運行,可以看到窗口了,到這步位置,一個基本的MFC程序就已經建立起來了,大家可以對窗口添加想要的風格。這里就不做詳細說明了。

?????
二、????????????? 進一步修改工程,使其支持WPF

????????1.???????? 修改工程屬性,在工程屬性的GeneralCommon Language Runtime Support中選擇/Clr, 這個選項可以讓這個工程支持Common Language Runtime. 這樣我們的工程里就可以寫C++/CLI的代碼,用來操作WPF了。

Figure 8 Support clr
????????2.???????? 添加References,在工程屬性中的左面的樹上選擇,Common Properties->References(C++程序員好像機會很少用到)

Figure 9 Add References

??????????點擊Add New Reference按鈕,彈出如下對話框????????????????????????????

?

?????????? 順次添加如下.NET dlls. 到現在位置,這個工程就已經完全支持WPF了
????????????????
?
????????3.???????? 添加顯示WPF的部分
????????????
a)???????? 創建一個XAML文件,我已經上傳一個,Clock.XAML,這段XAMLWindows SDK中也可以找到。
????????????
b)??????? 動態讀取XAML文件
????????????
c)??????? WPFPage HostMFC的窗口中。完整代碼如下?????

using namespace System;
using namespace System::IO;
using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace System::Windows::Markup;
using namespace System::Windows::Interop;


void?CCPlusPlus_WPFMainWnd::CreateWPFWnd()
{
????FileStream
^?pStream?=?File::OpenRead("Clock.XAML");
????
if(pStream?==?nullptr)
????????
return;

????Page
^?pMainPage?=?(Page^)XamlReader::Load(pStream);

????pStream
->Close();

????CRect?rcClient;
????GetClientRect(
&rcClient);

????Rect
^?rect?=?gcnew?Rect(0,?0,?rcClient.Width(),?rcClient.Height());

????HwndSourceParameters
^?sourceParams?=?gcnew?HwndSourceParameters(gcnew?String("WPFWnd"));
????sourceParams
->PositionX?=?Int32(rect->X);
????sourceParams
->PositionY?=?Int32(rect->Y);
????sourceParams
->Height?=?Int32(rect->Height);
????sourceParams
->Width?=?Int32(rect->Width);
????sourceParams
->ParentWindow?=?System::IntPtr(m_hWnd);
????sourceParams
->WindowStyle?=?WS_VISIBLE|WS_CHILD|WS_CLIPCHILDREN;

????HwndSource
^?source?=?gcnew?HwndSource(*sourceParams);
????
if(source?==?nullptr)
????????
return;

????source
->RootVisual?=?pMainPage;
}

?????????? d)??????? CCPlusPlus_WPFMainWnd::OnCreate中調用上面的函數。
????????????
e)???????? 編譯運行,一切Ok了。

當然,這只是基本的步驟,在這個基礎上就可以利用C++WPF來開發一個完整的軟件了

轉載于:https://www.cnblogs.com/sun9411323/archive/2007/12/04/981600.html

總結

以上是生活随笔為你收集整理的C++开发WPF,Step by Step的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。