diff -r 523ab7c30b45 include/Scintilla.h
--- a/include/Scintilla.h	Fri Nov 14 10:41:27 2014 +0100
+++ b/include/Scintilla.h	Sun Nov 16 17:25:37 2014 +1100
@@ -899,6 +899,7 @@
 #define SC_TECHNOLOGY_DEFAULT 0
 #define SC_TECHNOLOGY_DIRECTWRITE 1
 #define SC_TECHNOLOGY_DIRECTWRITERETAIN 2
+#define SC_TECHNOLOGY_DIRECTWRITEDC 3
 #define SCI_SETTECHNOLOGY 2630
 #define SCI_GETTECHNOLOGY 2631
 #define SCI_CREATELOADER 2632
diff -r 523ab7c30b45 include/Scintilla.iface
--- a/include/Scintilla.iface	Fri Nov 14 10:41:27 2014 +0100
+++ b/include/Scintilla.iface	Sun Nov 16 17:25:37 2014 +1100
@@ -2366,6 +2366,7 @@
 val SC_TECHNOLOGY_DEFAULT=0
 val SC_TECHNOLOGY_DIRECTWRITE=1
 val SC_TECHNOLOGY_DIRECTWRITERETAIN=2
+val SC_TECHNOLOGY_DIRECTWRITEDC=3
 
 # Set the technology used.
 set void SetTechnology=2630(int technology,)
diff -r 523ab7c30b45 win32/ScintillaWin.cxx
--- a/win32/ScintillaWin.cxx	Fri Nov 14 10:41:27 2014 +0100
+++ b/win32/ScintillaWin.cxx	Sun Nov 16 17:25:37 2014 +1100
@@ -210,7 +210,7 @@
 	static ATOM callClassAtom;
 
 #if defined(USE_D2D)
-	ID2D1HwndRenderTarget *pRenderTarget;
+	ID2D1RenderTarget *pRenderTarget;
 	bool renderTargetValid;
 #endif
 
@@ -222,7 +222,7 @@
 	virtual void Initialise();
 	virtual void Finalise();
 #if defined(USE_D2D)
-	void EnsureRenderTarget();
+	void EnsureRenderTarget(HDC hdc);
 	void DropRenderTarget();
 #endif
 	HWND MainHWND();
@@ -441,7 +441,7 @@
 
 #if defined(USE_D2D)
 
-void ScintillaWin::EnsureRenderTarget() {
+void ScintillaWin::EnsureRenderTarget(HDC hdc) {
 	if (!renderTargetValid) {
 		DropRenderTarget();
 		renderTargetValid = true;
@@ -455,12 +455,6 @@
 
 		// Create a Direct2D render target.
 #if 1
-		D2D1_HWND_RENDER_TARGET_PROPERTIES dhrtp;
-		dhrtp.hwnd = hw;
-		dhrtp.pixelSize = size;
-		dhrtp.presentOptions = (technology == SC_TECHNOLOGY_DIRECTWRITERETAIN) ?
-			D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS : D2D1_PRESENT_OPTIONS_NONE;
-
 		D2D1_RENDER_TARGET_PROPERTIES drtp;
 		drtp.type = D2D1_RENDER_TARGET_TYPE_DEFAULT;
 		drtp.pixelFormat.format = DXGI_FORMAT_UNKNOWN;
@@ -470,7 +464,32 @@
 		drtp.usage = D2D1_RENDER_TARGET_USAGE_NONE;
 		drtp.minLevel = D2D1_FEATURE_LEVEL_DEFAULT;
 
-		pD2DFactory->CreateHwndRenderTarget(drtp, dhrtp, &pRenderTarget);
+		if (technology == SC_TECHNOLOGY_DIRECTWRITEDC) {
+			// Explicit pixel format needed.
+			drtp.pixelFormat = D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
+				D2D1_ALPHA_MODE_IGNORE);
+
+			ID2D1DCRenderTarget *pDCRT = NULL;
+			HRESULT hr = pD2DFactory->CreateDCRenderTarget(&drtp, &pDCRT);
+			if (FAILED(hr)) {
+				Platform::DebugPrintf("Failed CreateDCRenderTarget 0x%x\n", hr);
+			}
+			pRenderTarget = pDCRT;
+
+		} else {
+			D2D1_HWND_RENDER_TARGET_PROPERTIES dhrtp;
+			dhrtp.hwnd = hw;
+			dhrtp.pixelSize = size;
+			dhrtp.presentOptions = (technology == SC_TECHNOLOGY_DIRECTWRITERETAIN) ?
+			D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS : D2D1_PRESENT_OPTIONS_NONE;
+
+			ID2D1HwndRenderTarget *pHwndRenderTarget = NULL;
+			HRESULT hr = pD2DFactory->CreateHwndRenderTarget(drtp, dhrtp, &pHwndRenderTarget);
+			if (FAILED(hr)) {
+				Platform::DebugPrintf("Failed CreateHwndRenderTarget 0x%x\n", hr);
+			}
+			pRenderTarget = pHwndRenderTarget;
+		}
 #else
 		pD2DFactory->CreateHwndRenderTarget(
 			D2D1::RenderTargetProperties(
@@ -484,6 +503,16 @@
 		// need to be recreated.
 		DropGraphics(false);
 	}
+
+	if (technology == SC_TECHNOLOGY_DIRECTWRITEDC) {
+		RECT rcWindow;
+		GetClientRect(MainHWND(), &rcWindow);
+		HRESULT hr = static_cast<ID2D1DCRenderTarget*>(pRenderTarget)->BindDC(hdc, &rcWindow);
+		if (FAILED(hr)) {
+			Platform::DebugPrintf("BindDC failed 0x%x\n", hr);
+			DropRenderTarget();
+		}
+	}
 }
 
 void ScintillaWin::DropRenderTarget() {
@@ -638,7 +667,7 @@
 		}
 	} else {
 #if defined(USE_D2D)
-		EnsureRenderTarget();
+		EnsureRenderTarget(pps->hdc);
 		AutoSurface surfaceWindow(pRenderTarget, this);
 		if (surfaceWindow) {
 			pRenderTarget->BeginDraw();
@@ -1406,6 +1435,7 @@
 		case SCI_SETTECHNOLOGY:
 			if ((wParam == SC_TECHNOLOGY_DEFAULT) || 
 				(wParam == SC_TECHNOLOGY_DIRECTWRITERETAIN) ||
+				(wParam == SC_TECHNOLOGY_DIRECTWRITEDC) ||
 				(wParam == SC_TECHNOLOGY_DIRECTWRITE)) {
 				if (technology != static_cast<int>(wParam)) {
 					if (static_cast<int>(wParam) > SC_TECHNOLOGY_DEFAULT) {
@@ -1417,6 +1447,9 @@
 						return 0;
 #endif
 					}
+#if defined(USE_D2D)
+					DropRenderTarget();
+#endif
 					technology = static_cast<int>(wParam);
 					// Invalidate all cached information including layout.
 					DropGraphics(true);
@@ -2542,7 +2575,7 @@
  * This paint will not be abandoned.
  */
 void ScintillaWin::FullPaint() {
-	if (technology == SC_TECHNOLOGY_DEFAULT) {
+	if ((technology == SC_TECHNOLOGY_DEFAULT) || (technology == SC_TECHNOLOGY_DIRECTWRITEDC)) {
 		HDC hdc = ::GetDC(MainHWND());
 		FullPaintDC(hdc);
 		::ReleaseDC(MainHWND(), hdc);
@@ -2567,7 +2600,7 @@
 		}
 	} else {
 #if defined(USE_D2D)
-		EnsureRenderTarget();
+		EnsureRenderTarget(hdc);
 		AutoSurface surfaceWindow(pRenderTarget, this);
 		if (surfaceWindow) {
 			pRenderTarget->BeginDraw();
