2016-07-07 57 views
2

我有MFC SDI应用程序。
它具有功能区,状态栏,属性窗口,...更改客户区视图

我需要使视图的客户区域为x % 16。 所以我不能调整整个窗口,但我需要调整CMyView可以被16个像素整除。

有没有办法做到这一点?

此代码不起作用:=(

void CMyView::OnSize(UINT nType, int cx, int cy) 
{ 
    cx -= cx % 16; 
    cy -= cy % 16; 

    CView::OnSize(nType, cx, cy); 

    RECT wr = { 0, 0, cx, cy }; 
    AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE); 
} 
+0

'AdjustWindowRect'不调节任何东西,它仅仅_calculates窗口矩形的所需尺寸,基于所期望的客户端 - 矩形size_(引文从[MS文档】(HTTPS:// MSDN .microsoft.com/EN-US /库/窗/桌面/ ms632665(V = vs.85)的.aspx))。并调用不同大小的'CView :: OnSize'并没有太大的作用(不记得我读过的文档的哪一部分)。 –

+0

你看过使用[MoveWindow](https://msdn.microsoft.com/en-us/library/windows/desktop/ms633534(v = vs.85).aspx)吗? –

+0

我发现了一些解决方法:1.为视图创建额外的子窗口; 2.在调整大小时将其对齐16个像素并居中视图。 –

回答

3

处理这WM_SIZE/OnSize是为时已晚,因为窗口已到那个时候调整使用ON_WM_WINDOWPOSCHANGING代替,以监视对窗口大小和应用以下。变化:

void CMyWnd::OnWindowPosChanging(WINDOWPOS* wpos) 
{ 
    wpos->cx -= wpos->cx % 16; 
    wpos->cy -= wpos->cy % 16; 
    __super::OnWindowPosChanging(wpos); 
}