HWNDを必要としない入力コントールをDirect2Dで作成しました。C++で作成されるアプリはやがてこの方式へ移行すると思われます。
従来、Windowsコントロール(button,textbox,listbox,...)は以下のようにParent Windowのchild windowとして作成しなければ、なりませんでした。


// hParentWnd: parent window handle
HWND hBtnWnd = ::CreateWindow( L"button",L"btn1", WS_CHILD|WS_VISIBLE, 0,0,100,30,hParentWnd,NULL,hInst,0 );

ボタンのHWNDが作成されます。これを以下のようにします。


// parent : D2DWindow 唯一HWNDをもつWindowクラス
// cs : D2DControls 親コントロール
D2DButton* btn = new D2DButton();
btn->CreateWindow( parent, cs, rc, VISIBLE|BORDER,L"btn1" );
ボタンのHWNDは作成されません。ボタンは親コントロール同じWM_PAINTで描画します。これら一連の動作はD2DButton::WndProcに記述します。

LRESULT D2DControls:WndProc(D2DWindow* d,UINT messsage, WPARAM wParam, LPARAM lParam )
{
// 親Controls
switch( message )
{
case WM_PAINT:
for( auto& it : constrols_ )
it->WndProc( d, WM_PAINT,wParam,lParam ); // buttonのWndProcへWM_PAINTを投げる
break;
....
}
return 0;
}

LRESULT D2DButton::WndProc(D2DWindow* d,UINT messsage, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_PAINT:
// ボタンの絵
break;
case WM_LBUTTONDOWN:
// クリックした場合
break;
...
}
return 0;
}

この方式の利点は、簡単にコントロール類を入れ子で多重化ができることです。例えばリストボックスの中にリストボックスをいれるとか。
XP時代にこれに挑戦しても、できないわけではありませんが動作がぎこちなく、またIMEは勝手に変換Windowをかぶせてきたりして意味あるものになりませんでした。
一方現在は、Direct2Dでは描画がアニメが作れるほど(60fps)高速化され、IMEはTFSとなり状況が大きく変化しました。対象がWindowsだけと限らなくなったという点もあります。

ソース一式はここです。

なるべく素直にプログラムできるようにまた、ありがちなC++の独りよがりなクラスにならないように、従来のプログラミングをなるべく継承して実装しました。
とは言っても、クロージャーやstd::functionはのような新しい?機能は時々利用してます。
また、面食らわないように、必要最小限の構成にソースを整理してあります。
しかし、拡張に必要な仕組みはすべてはいっています。

VisualStudio2013でビルドできます。

Direct2Dの本当の意味はこれに尽きるはずです。