レイヤードウィンドウについて質問させて下さい。
開発環境は VC++ 6.0、MFCは使っていません。

800 * 600 ピクセルのメインウィンドウを WS_EX_LAYERED にして、UpdateLayeredWindow() で更新を掛けています。
サーフェスの一部(第5引数に指定する32bitのDIBセクション)の一部だけを転送するような方法が見つからないので、画面を更新する必要がある場合は、800 * 600 ピクセル全体を転送しています。
ウィンドウがドラッグされたり、マウスが押された離された、あるいはマウスが動いた(これは毎回ではないですが)、タイマイベントが来た、という時に再描画が必要です。

会社の Core2 Duo 搭載マシン(3GHzのCPUが2個あるように見える)ではサクサク動くのですが、自宅の CeleronD 2.53GHz のマシンでは、ガクガク・チラチラです。OSは、前者は WndowsXP Pro SP2、後者は WindowsXP Home SP1 です。

具体的にどこが違うか調べてみると、やはり UpdateLayeredWindow() の呼び出しにかかる時間が、前者は 0〜16ms なのに対して、後者は 200〜250ms と大きな開きがありました。(時間計測は timeGetTime() で行いました。)

UpdateLayeredWindow() は比較的高速、と聞いていたのですが、やはりこの位は掛かってしまうものなのでしょうか?
それともこんな大きいウィンドウをレイヤードにする事自体が間違っているのでしょうか?
関数の呼び出し方はこうです。

--------------------------------------------------------------
static POINT ptSrc = {0, 0};
static SIZE sz = {800, 600};
static BLENDFUNCTION bf = {AC_SRC_OVER, 0, 0xff, AC_SRC_ALPHA};

HDC hdc_dst = GetDC(NULL);

HDC hdc_src = CreateCompatibleDC(hdc_dst);
SelectObject(hdc_src, hBitmap); // hBitmap は裏画面のハンドル(32bitDIBセクション)

UpdateLayeredWindow(g_hWnd, hdc_dst, &g_ptWnd, &sz, hdc_src, &ptSrc, 0, &bf, ULW_ALPHA); // g_ptWnd はグローバル

DeleteDC(hdc_src);
ReleaseDC(NULL, hdc_dst);
--------------------------------------------------------------

どなたか、御助言をよろしくお願いします。