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];

不幸的是,事实并非如此,我不知道发生了什么,也不知道为什么上述两者有任何不同。我已经在纸上多次阅读了它,但我不明白为什么使用两个不同的矩形并偏移它们与将帧偏移直接应用于原始矩形有什么不同。

想法?

4

1 回答 1

0

你的迹象很混乱。第一个例子应该产生负数rcFrame.leftrcFrame.top但是你从位置中减去它们,给出一个正偏移量。第二个例子应该是正确的。

于 2013-03-02T03:31:19.887 回答