ビスタで定形の境界線のスタイルを持つ奇妙な問題
-
21-08-2019 - |
質問
この問題についての私の以前の記事は、あまりにも多くの回答を得ていなかった、それはちょっと特定し、理解するのが難しかったです。 ...私は、私はより良い問題を理解するために管理したと思うと、私は今、それはVistaの問題であると信じる。
問題がFixedDialog、Fixed3D、FixedSingleとFixedToolWindowなどの固定境界線のスタイルのすべての種類に位置しています。それはかなりのものでは発生しません。私が言ったように、この問題は、それはまた、唯一のVista上で起こります。
あなたが固定枠線のスタイルのいずれかのフォームを持っているし、0,0に、スタート地点を設定しましょう。フォームが画面の左上隅にスナップさせるために何がここで欲しいのです。これは、フォームの境界線スタイルはかなりの選択肢の一つである場合は、それが固定なら、よく、フォームは左と上に少しの両方の画面の作業領域の外になりますだけで正常に動作します。
何これについての詳細奇妙だが、フォームの場所が変更されないということです。、それは敷居0,0ですが、フォームのいくつかのピクセルは、まだ作業画面領域の外側に描画されます。
私はXP上でこれをテストし、それが実現しなかった、問題は、Vistaの特定です。 XPでは、唯一の違いは、スタイルのいずれかの間でビットを変更する境界線のサイズでした。しかし、フォームは常に完璧に位置0,0にスナップします。
可能な場合は、 の
?この問題を解決または回避策するために可能な方法があり、フォームの場所にそれを追加し、作業領域の外側に描画されているどのように多くの画素を見つけ、なし解決
、WindowsがFixed*
のFormBorderStyle
ウィンドウのサイズと位置についてあなたに嘘をつくでしょう。次のコードは、正しい高さを取得する方法を示し、そのようなウィンドウの上部オフセット。同様の技術を使用すると、(0,0)でウィンドウを配置することができます。
[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();
// When Aero is enabled, and our FormBorderStyle is FixedToolWindow,
// Windows will lie to us about our size and position.
public bool AeroIsMessingWithUs()
{
bool ret = false;
try
{
// check for other Fixed styles here if needed
if (FormBorderStyle == System.Windows.Forms.FormBorderStyle.FixedToolWindow)
{
if (Environment.OSVersion.Version.Major >= 6 && DwmIsCompositionEnabled())
{
// Aero is enabled
ret = true;
}
}
}
catch
{
}
return ret;
}
public int MyWindowHeight()
{
int height = Height;
if (AeroIsMessingWithUs())
{
// there are actually 5 more pixels on the top and bottom
height += 10;
}
return height;
}
public int MyWindowY()
{
int y = Location.Y;
if (AeroIsMessingWithUs())
{
// I'm actually 5 pixels higher than Windows says I am
y -= 5;
}
return y;
}
他のヒント
私はこれをしたい理由が適用される皮膚を持っている私のアプリケーションは、その皮膚を有効または無効にできるようにすることです。アプリケーション全体は、皮膚と正常に動作していると私は肌を有効または無効にするプロパティを実装しようとしていました。このトピックに関する問題は、皮膚が無効になっている時に私がいる問題の一つでした。私はその後、私はまた、皮膚が無効になっている場合に対処するための他の迷惑な問題がたくさんあることに気づきました。これは、私はちょうど今のところ、この機能を忘れると、当分の間、常に上の皮膚を残しておきます意味。私はちょうど今、非常に多くの問題を処理する時間がない...
この質問を閉じるために提案...