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];
不幸的是,现在没有,我没有了解发生了什么,或者为什么上述两者完全不同。我已经多次在纸上读过它,我不明白为什么使用两个不同的rects并抵消它们与将帧偏移直接应用到原始rect有什么不同。
想法?
与您的具体问题无关,但这两个示例都会调用[未定义行为](http://en.wikipedia.org/wiki/Undefined_behavior)... – ildjarn 2013-03-02 01:21:51
当您在第二个代码中看不到任何偏移时返回rcPos,这可能是不同的。 – TravellingGeek 2013-03-02 01:24:22
@ildjarn,'return'正在创建一个指向局部变量的指针,但是它同时对它进行了引用。那是你认为你看到的未定义的行为,还是还有其他的东西? – 2013-03-02 03:29:19