■102692 / inTopicNo.6) |
Re[3]: Windows Forms での Formのボーダー太さ |
□投稿者/ 魔界の仮面弁士 (3735回)-(2023/12/12(Tue) 10:00:37)
|
■No102688 (Azulean さん) に返信 > PE ヘッダーの Subsystem version によって、ウィンドウの枠の振る舞いが変わります。 おぉ、知りませんでした。φ(。。)
> 従来と同じ形を端的に実現する手段は、.NET Framework のターゲットバージョンを 4.0 に落とすことだと思います。 > (ただし、VS2022 は 4.0 〜 4.5.1 の開発をサポートしていません) 「Visual Studio 2022 以降では、Visual Studio に .NET Framework 4.0 から 4.5.1 用の .NET Framework コンポーネントが含まれなくなりました。」 https://learn.microsoft.com/ja-jp/dotnet/framework/install/guide-for-developers?WT.mc_id=DT-MVP-8907 と書いてあるのですが、手元の環境だと、ターゲットフレームワークとして VS2022P… 2.0/3.0/3.5/4/4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2/4.8/4.8.1 VS2022 … 2.0/3.0/3.5/4/4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2/4.8/4.8.1 VS2019 … 2.0/3.0/3.5/4/4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2/4.8/4.8.1 VS2017 … 2.0/3.0/3.5/4/4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2/4.8/4.8.1 VS2010 … 2.0/3.0/3.5/4 VS2008 … 2.0/3.0/3.5 を選択できていますね。新旧バージョンが混在している環境だからかな…? ※Client Profile / .NET Comapact Framework / Unity などは省略
で…VS2022 + Win10 22H2 という環境なので、元質問者とはちょっと違うのですが、 VS2022 で .NET Framework 3.5 / 4.8 をそれぞれ選択し、FixedSingle フォームを比較してみると 微妙に差異が生じますね。
下記はいずれも Visual Studio 2022 での結果です。 //Form1_Load this.Text = String.Format("Size={0}, ClientSize={1}", Size, ClientSize);
.NET Framework 2.0/3.0/3.5 Client Profile/4/4 Client Profile Size={Width=806, Height=479}, ClientSize={Width=800, Height=450}
.NET Framework 4.5/4.5.1/4.5.2/4.6/4.6.1/4.6.2/4.7/4.7.1/4.7.2/4.8/4.8.1 Size={Width=816, Height=489}, ClientSize={Width=800, Height=450}
PE Header を比較すると、.NET Framework 3.5 の時と 4.8 の時とで 00C0-00C3: 0004 0000 / 0004 0000 (MajorOperatingSystemVersion / MinorOperatingSystemVersion) 00C4-00C7: 0000 0000 / 0000 0000 (MajorImageVersion / MinorImageVersion) 00C8-00CB: 0004 0000 / 0006 0000 (MajorSubsystemVersion / MinorSubsystemVersion) という差異がありました。確かに SubSysVer が異なっていますね。 https://learn.microsoft.com/ja-jp/windows/win32/api/winnt/ns-winnt-image_optional_header32?WT.mc_id=DT-MVP-8907 https://learn.microsoft.com/ja-jp/windows/win32/api/winnt/ns-winnt-image_optional_header64?WT.mc_id=DT-MVP-8907 https://learn.microsoft.com/en-us/dotnet/api/system.reflection.portableexecutable.peheader.majorsubsystemversion?WT.mc_id=DT-MVP-8907
そして .NET Framework 3.5 向けにコンパイルした EXE ファイルをバイナリエディタで開き、 00C8 のバイナリを 0xC4 → 0x06 に書き換えてみたところ、FixedSingle フォームが、4.8 相当に Size={Width=816, Height=489}, ClientSize={Width=800, Height=450} に変化し、その逆に 4.5 版の 00C8 の位置を 0xC6 → 0x04 に書き換えると、3.5 相当の Size={Width=806, Height=479}, ClientSize={Width=800, Height=450} になることを確認できました。 もちろん、コンパイル後のバイナリを直接書き換えるという力業は、良策とはいえないでしょうけれどね…。
|
|