我已经在下面的文章中评论过使用DWM绘制自定义框架区域。 Custom Window Frame Using DWM 删除标准帧后,帧中不存在非客户区域。
lboSelectedMtrl
因为整个窗口都是客户端区域,所以我必须调整框架的UI控件位置,但我不知道如何处理这个问题。 例如,在删除非客户端部分之前,应将红色矩形(所有UI组件)下移到客户区的原始坐标中。
答案 0 :(得分:2)
CWnd::GetWindowRect
为您提供屏幕上窗口的矩形。标题,边框和滚动条的尺寸(如果存在)包括在内。
CWnd::GetClientRect
为您提供窗口的客户端rectangel。左侧和顶部成员将为0.右侧和底部成员将包含窗口的宽度和高度。
CWnd::ScreenToClient
和CWnd::ClientToScreen
计算从客户区到屏幕坐标并返回屏幕的点或矩形。
AdjustWindowRect
根据窗口的客户端矩形计算所需的窗口矩形。
这是计算窗口边缘的功能:
void CalculateWndMargin( const CWnd &wnd, int &leftM, int &rightM , int &topM, int &bottomM )
{
CRect wndRect;
wnd.GetWindowRect( wndRect );
CRect screenRect;
wnd.GetClientRect( screenRect );
wnd.ClientToScreen( screenRect );
leftM = screenRect.left - wndRect.left;
rightM = wndRect.right - screenRect.right;
topM = screenRect.top - wndRect.top;
bottomM = wndRect.bottom - screenRect.bottom;
}