CreateWindowExでウィンドウ上部の角が変になるのですが・・・

解決


S子  2005-10-12 15:35:45  No: 18033

Halbow氏のGeneric01のような
Win32APIのみでウィンドウを表示するアプリをDelphiで作成して
(Generic01.dprのそのままのコピーをコンパイルしてもOKです)
Windows XP/Server 2003等で視覚スタイルを適用している状態で起動をすると
タイトルバー上部の左右の角が一瞬角張って表示されてしまい
その後角がなくなって通常の視覚スタイルのウィンドウのように
角が丸く表示されます。
説明が難しいのですが残像が表示されるような感じです。
(VCLフォームのウィンドウでは残像は表示されません)
Delphi 6 ProfessionalとDelphi 4 Professionalで同じ結果になり
実機二台とVirtual PCで同じ結果になりました。
(時間に余裕のある方がいらっしゃいましたら試してみて頂けませんでしょうか)
TWndClassのstyleをCS_SAVEBITS等にすると残像は表示されなくなりますが
Delphiの通常のフォームはCS_DBLCLKSですし
(Forms.pasのソースと実際に確認した結果から)
CS_SAVEBITS等にしても数十回に一回位の割合で残像が表示されてしまいます。
CreateWindowExでXPの視覚スタイルの場合に
上部の左右の角が一瞬四角く表示されない普通のウィンドウを作る方法が
判る方がいらっしゃいましたらご指導下さい。
宜しくお願い致します。


えーと  2005-10-12 19:12:11  No: 18034

> (時間に余裕のある方がいらっしゃいましたら試してみて頂けませんでしょうか)
よく見つけましたね。確かに残像が表示されます。

Delphi7 Pro Update 1 + XP Pro SP2


きーちゃん  2005-10-14 01:33:30  No: 18035

Delphi5でもなりますねー。
小さめのサイズ固定のウィンドウ(300x200)とかで
スクリーン中央表示にするとかなり気になりますねー。
非表示で生成して生成後に表示させてもなりますねー。
ううむ。


ママん  2005-10-14 02:07:14  No: 18036

解決してませんが…一応報告。
Visual C++6.0でも再現します。
あと、XPスタイルを適応させても再現します。
気になります。


ん〜〜〜仕様ですか?  2005-10-14 18:05:31  No: 18037

WinXP SP2 in VirtualPC で確認してみましたが、下記のMS製品でもなります。
[再現するもの]
・メモ帳(notepad.exe)
・レジストリエディタ(regedit.exe)
・ソリティア(sol.exe)
・システムエディタ(sysedit.exe)

[再現しないもの]
・エクスプローラー(explorer.exe)
・タスクマネージャー(taskmgr.exe)

システムエディタなんて、視覚スタイルですら表示されない(笑)
# ファイル−バージョン情報 を選んでもナニも出ない。
# ふざけたツールだ。

もちろん、Halbow氏のGeneric01(by Delphi5 + Update1)でも再現しました。


S子  2005-10-15 15:56:36  No: 18038

自己解決しました。
'非表示で生成して生成後に表示'も'XPスタイル適用'も
'TWndClassのstyleをCS_SAVEBITS等にする'を試みる前に行ってはいたのですが
色々と実験して下さって本当にありがとうございました。
'他のDelphi'や'他の開発環境'や'他の実行ファイル'で試して下さった方々も
本当にありがとうございました。
CreateWindowExで位置が0,0のサイズが0x0とかでWS_VISIBLEにしないで
CreateしておいてWM_SHOWWINDOWのMessageを受け取った時に
MoveWindowでShowWindowさせたい位置とサイズに変更することで
残像は回避できました。
普通にWS_VISIBLEにしないでおいて同じ位置とサイズでMoveWindowする方法は
なぜか失敗でした。
もう少し研究してみるつもりですが'解決'にしておきます。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加