基于VisualStudio11开发Windows8的Direct2D-Metro应用程序范例(1)hello world

网友投稿 675 2022-09-13

基于VisualStudio11开发Windows8的Direct2D-Metro应用程序范例(1)hello world

基于VisualStudio11开发Windows8的Direct2D-Metro应用程序范例(1)hello world

Direct2D是美国微软公司用来取代 DirectDraw 以及GDI, GDI+等新技术[1],主要提供2D 动画的硬件加速,目前只支援 Windows Vista SP2以及Windows 7以上[2]。

Direct2D技术架构于Direct3D 10.1 API 之上,能够透过硬件加速功能来建立2D图形,而且完全支持透明和Alpha混合。Direct2D 亦支援软件实现(Software rasterizer),亦即在显卡不支持硬件加速情况下,Direct2D 仍可以使用软件方式描绘,且效果仍优于GDI。

Direct2D 可以使用DXGI(DirectX Graphics Infrastructure) 与交互操作,Direct2D还能很好的支持DirectWrite。

Direct2D的支持高品质的渲染,具有以下特点:

支援ClearType 文字的呈现方式(DirectWrite 提供)

消除原图锯齿状(Per primitive antialiasing)

几何形状(直线,曲线)和位图绘制和填写。

纯色(Solid color)、线性。

描绘中间层。

多元的几何操作(如unions, intersections, widening, outlining等)

在微软VS11提供了Direct模板

我们创建一个应用程序以后,

插入下列代码

请见代码分析

#include "pch.h"#include "DWriteHelloWorld.h"using namespace Microsoft::WRL;using namespace Windows::ApplicationModel;using namespace Windows::ApplicationModel::Core;using namespace Windows::ApplicationModel::Activation;using namespace Windows::UI::Core;using namespace Windows::System;using namespace Windows::Foundation;using namespace Windows::Graphics::Display;DWriteHelloWorld::DWriteHelloWorld(){}void DWriteHelloWorld::CreateDeviceIndependentResources(){ DirectXBase::CreateDeviceIndependentResources(); DX::ThrowIfFailed( m_dwriteFactory->CreateTextFormat( L"Gabriola", nullptr, DWRITE_FONT_WEIGHT_REGULAR, DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 64.0f, L"en-US", //locale &m_textFormat ) ); // Center the text horizontally and vertically. m_textFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER); m_textFormat->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);}void DWriteHelloWorld::CreateDeviceResources(){ DirectXBase::CreateDeviceResources(); m_sampleOverlay = ref new SampleOverlay(); m_sampleOverlay->Initialize( m_d2dDevice.Get(), m_d2dContext.Get(), m_wicFactory.Get(), m_dwriteFactory.Get(), "D2D Hello World sample by Microsoft MVP Yincheng" ); DX::ThrowIfFailed( m_d2dContext->CreateSolidColorBrush( D2D1::ColorF(D2D1::ColorF::Black), &m_blackBrush ) );}void DWriteHelloWorld::CreateWindowSizeDependentResources(){ DirectXBase::CreateWindowSizeDependentResources(); Platform::String^ text = "Hello World By Microsoft MVP -Yincheng!"; D2D1_SIZE_F size = m_d2dContext->GetSize(); //创建文本输出设备 DX::ThrowIfFailed( m_dwriteFactory->CreateTextLayout( text->Data(), text->Length(), m_textFormat.Get(), size.width, size.height, &m_textLayout ) ); DWRITE_TEXT_RANGE textRange = {21, 12}; //设置文字大小 m_textLayout->SetFontSize(100.0f, textRange); //创建图形文字显示设备 DX::ThrowIfFailed( m_dwriteFactory->CreateTypography( &m_textTypography ) ); DWRITE_FONT_FEATURE fontFeature = {DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6, 1}; m_textTypography->AddFontFeature(fontFeature); //移动文字的长度 textRange.length = text->Length(); textRange.startPosition = 0; //显示文字 DX::ThrowIfFailed( m_textLayout->SetTypography( m_textTypography.Get(), textRange ) ); //设置文字的长度与开始位置 textRange.length = 12; textRange.startPosition = 21; //设置水平线 m_textLayout->SetUnderline(TRUE, textRange); m_textLayout->SetFontWeight(DWRITE_FONT_WEIGHT_BOLD, textRange);}void DWriteHelloWorld::Render(){ m_d2dContext->BeginDraw(); m_d2dContext->Clear(D2D1::ColorF(D2D1::ColorF::CornflowerBlue)); m_d2dContext->SetTransform(D2D1::Matrix3x2F::Identity()); m_d2dContext->DrawTextLayout( D2D1::Point2F(0.0f, 0.0f), m_textLayout.Get(), m_blackBrush.Get() ); HRESULT hr = m_d2dContext->EndDraw(); if (hr == D2DERR_RECREATE_TARGET) { m_d2dContext->SetTarget(nullptr); m_d2dTargetBitmap = nullptr; CreateWindowSizeDependentResources(); } else { DX::ThrowIfFailed(hr); } m_sampleOverlay->Render();}void DWriteHelloWorld::Initialize( _In_ CoreApplicationView^ applicationView ){ applicationView->Activated += ref new TypedEventHandler(this, &DWriteHelloWorld::OnActivated); CoreApplication::Suspending += ref new EventHandler(this, &DWriteHelloWorld::OnSuspending); CoreApplication::Resuming += ref new EventHandler(this, &DWriteHelloWorld::OnResuming);}void DWriteHelloWorld::SetWindow( _In_ CoreWindow^ window ){ window->PointerCursor = ref new CoreCursor(CoreCursorType::Arrow, 0); window->SizeChanged += ref new TypedEventHandler(this, &DWriteHelloWorld::OnWindowSizeChanged); DisplayProperties::LogicalDpiChanged += ref new DisplayPropertiesEventHandler(this, &DWriteHelloWorld::OnLogicalDpiChanged); DirectXBase::Initialize(window, DisplayProperties::LogicalDpi);}void DWriteHelloWorld::Load( Platform::String^ entryPoint ){}void DWriteHelloWorld::Run(){ Render(); Present(); m_window->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessUntilQuit);}void DWriteHelloWorld::Uninitialize(){}void DWriteHelloWorld::OnWindowSizeChanged( _In_ CoreWindow^ sender, _In_ WindowSizeChangedEventArgs^ args ){ UpdateForWindowSizeChange(); m_sampleOverlay->UpdateForWindowSizeChange(); Render(); Present();}void DWriteHelloWorld::OnLogicalDpiChanged( _In_ Platform::Object^ sender ){ SetDpi(DisplayProperties::LogicalDpi); Render(); Present();}void DWriteHelloWorld::OnActivated( _In_ CoreApplicationView^ applicationView, _In_ IActivatedEventArgs^ args ){ m_window->Activate();}void DWriteHelloWorld::OnSuspending( _In_ Platform::Object^ sender, _In_ SuspendingEventArgs^ args ){}void DWriteHelloWorld::OnResuming( _In_ Platform::Object^ sender, _In_ Platform::Object^ args ){}IFrameworkView^ DirectXAppSource::CreateView(){ return ref new DWriteHelloWorld();}[Platform::MTAThread]int main(Platform::Array^){ auto directXAppSource = ref new DirectXAppSource(); CoreApplication::Run(directXAppSource); return 0;}

赶紧-VS11体验吧

​​http://microsoft.com/click/services/Redirect2.ashx?CR_CC=200098144​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于VisualStudio11开发Windows8的Direct2D-Metro应用程序范例(2) 国际化文字展示
下一篇:C#工作常用关键字(c1驾照能开什么车)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~