在我的课堂上,我编写了以下代码来处理窗口的灰色区域。我尝试不处理框架,因为框架有时会改变样式并且会导致意外的大小调整行为。预期的行为是它返回窗口最左上角的灰色像素。
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];
不幸的是,事实并非如此,我不知道发生了什么,也不知道为什么上述两者有任何不同。我已经在纸上多次阅读了它,但我不明白为什么使用两个不同的矩形并偏移它们与将帧偏移直接应用于原始矩形有什么不同。
想法?