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