お世話になっております。
サイズ100×100でUpdateLayeredWindowします。
Windowを右端に持って行き、少し消えるくらいにします。
サイズ200×200でもう一度UpdateLayeredWindowします。
すると、サイズ100×100のWindowになってしまいます。
たまにならない時もあります。
一度何かをクリアしないといけないのでしょうか?
以下のドキュメントをみてWS_EX_LAYEREDをクリアしてRedrawWindow()もやってみたので
すが、効果ありませんでした。
・Using Layered Windows
http://msdn.microsoft.com/en-us/library/ms632598(VS.85).aspx#layered_win
// コード
HDC destDC = ::GetDC(NULL);
HDC srcDC = ::CreateCompatibleDC(destDC);
::SelectObject(srcDC, hBitmap);
BLENDFUNCTION bf = {0};
bf.BlendOp = AC_SRC_OVER;
bf.SourceConstantAlpha = 255;
bf.AlphaFormat = AC_SRC_ALPHA;
POINT srcPt = {0, 0};
// size は1回目100, 100。2回目は200, 200
::UpdateLayeredWindow(m_hWnd, destDC, NULL, &size, srcDC, &srcPt, 0, &bf,
ULW_ALPHA);
・環境
XP SP3
Visual Studio 2008 SP1
> サイズ200×200でもう一度UpdateLayeredWindowします。
> すると、サイズ100×100のWindowになってしまいます。
KJ さんと同環境で確認したワケで無いので断言できないが、UpdateLayeredWindow 後に
SetWindowPos(m_hWnd, NULL, 0, 0, 0, 0,
SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_FRAMECHANGED);
とでもして Window 領域の再計算を強制してやればどうだろう。
すみません、GW突入で返信が遅くなってしまいました。
UpdateLayeredWindowの前か後に、
MoveWindowかSetWindowPosで解決しました。
ありがとうございました。