UpdateLayeredWindowを2回呼ぶとクリップされる – プログラミング – Home

通知
すべてクリア

[解決済] UpdateLayeredWindowを2回呼ぶとクリップされる


KJ
 KJ
(@KJ)
ゲスト
結合: 21年前
投稿: 52
Topic starter  

お世話になっております。

サイズ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


引用未解決
トピックタグ
gak
 gak
(@gak)
ゲスト
結合: 21年前
投稿: 132
 

> サイズ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 領域の再計算を強制してやればどうだろう。


返信引用
KJ
 KJ
(@KJ)
ゲスト
結合: 21年前
投稿: 52
Topic starter  

すみません、GW突入で返信が遅くなってしまいました。

UpdateLayeredWindowの前か後に、
MoveWindowかSetWindowPosで解決しました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました