方法1:
Direct2Dで色を塗るとこうなります。ブラシというリソース(作成時にRenderTargetを必要とする)を作成して、描画後に開放します。
GDI32のSelectObjectに似た感じですが、リソースを描画単位で作成する方法はメモリリークの点で確実ですが、動作が遅くなります。
アニメのように1秒間に数十回描画する場合、作成開放も数十回実行されますから非効率です。


case WM_PAINT:
{
...

ID2D1DeviceContext* cxt = GetTarget();

ID2D1SolidColorBrush* red;
cxt->CreateSolidColorBrush( D2RGB(255,0,0), &red );
cxt->FillRectangle( rc, red );
red->Release();

...
}
break;

方法2:
そこで、リソースをまとめてどこかで作成して描画するとこのようになります。
WM_SIZEで使用するリソースを作成します。
リソースがメモリ上に置かれたままになるため、数が多いと問題になります。
速度は速いですが、RenderTargetが壊れた時のことを配慮しなければなりません。GDI32にはないポイントです。


case WM_PAINT:
{
...

ID2D1DeviceContext* cxt = GetTarget();

ID2D1SolidColorBrush* red = RESOURCE_GetSolidBrush(cxt, D2RGB(255,0,0));
cxt->FillRectangle( rc, red );
...
}
break;


case WM_SIZE:
{
...

ID2D1DeviceContext* cxt = GetTarget();

if ( cxt )
{
RESOURCE_DestroyBrsuhResource();
DestroyRenderTarget(cxt);
}

cxt = CreateRenderTarget( 幅, 高さ );

RESOURCE_CreateBrsuhResource(cxt);

}
break;

MSはRenderTargetが壊れた時にどうにかしろという説明をしていますが、あれ、よくわかりません。
逆に、積極的に壊すようなプログラムにしないと問題を把握できません。
そこで、画面サイズが変更になった時、RenderTargetを壊して作り直しています。

ちなみに、
一度作成したリソースをすべて綺麗に開放しないと、ID2D1DeviceContextの再作成は失敗するため、RESOURCE_DestroyBrsuhResourceは重要です。

以上、GDI32(HDCを使う昔ながらのプログラミング)にはない考慮すべき点でした。