0

私のクラスでは、ウィンドウの灰色の領域を処理するために次のコードを書きました。フレームのスタイルが時々変更され、予期しないサイズ変更動作が発生するため、フレームを処理しないようにしています。予想される動作は、ウィンドウのグレーの左上端のピクセルを返すことです。

POINT Dialog::GetPosition ( void ) const
...
    RECT rcPos, rcFrame;
    SetRectEmpty(&rcFrame);
    AdjustWindowRectEx(&rcFrame, this->Style, FALSE, this->ExtendedStyle);
    GetWindowRect(this->Handle, &rcPos);
    OffsetRect(&rcPos, -rcFrame.left, -rcFrame.top);
    return reinterpret_cast<LPPOINT>(&rcPos)[0];

次に、クラスを最適化し、コードを次のように減らしました(これは同じように機能すると思います)。

POINT Dialog::GetPosition ( void ) const
...
    RECT rcPos;
    GetWindowRect(this->Handle, &rcPos);
    AdjustWindowRectEx(&rcPos, this->Style, FALSE, this->ExtendedStyle);
    return reinterpret_cast<LPPOINT>(&rcPos)[0];

残念ながらそうではありません.何が起こっているのか、なぜ上記の2つがまったく違うのか、私にはわかりません. 私は紙の上で何度もそれを経験しましたが、2つの異なる四角形を使用してそれらをオフセットすることが、フレームオフセットを元の四角形に直接適用することと異なる理由がわかりません。

アイデア?

4

1 に答える 1

0

あなたの兆候は混同されています。最初の例では、に対して負の数を生成する必要がrcFrame.leftありrcFrame.topますが、位置からそれらを減算して、正のオフセットを与えています。2番目の例は正しいはずです。

于 2013-03-02T03:31:19.887 に答える