做网站视频存储在哪里,广西桂林学院,贵州城市建设网站,施工企业部门目标责任书C开发WPF#xff0c;Step by Step 示例代码 使用C来开发WPF#xff0c;主要是如何在MFC#xff08;Win32#xff09;的窗口中Host WPF的Page。下面我就做个详细的介绍. 一、创建工程, 由于MFC的Wizard会生成很多用不到的代码#xff0c;所以我准备从一个空的工程开始创建一… C开发WPFStep by Step 示例代码 使用C来开发WPF主要是如何在MFCWin32的窗口中Host WPF的Page。下面我就做个详细的介绍. 一、创建工程, 由于MFC的Wizard会生成很多用不到的代码所以我准备从一个空的工程开始创建一个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 Application和MFC.。Finish进入下一步。见Figure 2 Figure 2 Application Setting c) 修改工程使工程变成MFC Windows程序。 i. 删除CPlusPlus_WPF.cpp和CPlusPlus_WPF.h文件 Figure 3 Remove no used files ii. 添加CWinApp派生类, 在工程上点击鼠标右键AddClass… 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 name为CCPlusPlus_WPFMainWnd, Base class为CWnd。 ii. 修改工程属性。将属性中的System-SubSystem从Concole改成Windows见Figure 7 Figure 7 Change property 到这一步一个基本的MFC程序所需要的两个类CWinApp和CWnd派生类就添加完了。我们的程序可以顺利编译通过但是还不能运行请继续看下一步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. 修改工程属性在工程属性的General的Common 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,这段XAML在Windows SDK中也可以找到。 b) 动态读取XAML文件 c) 把WPF的Page Host到MFC的窗口中。完整代码如下 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