MFC:FrameRgn没有构成整个区域

时间:2015-03-01 03:09:57

标签: winapi mfc

我创建了一个基于对话框的应用程序从对话框属性,我删除了标题栏并设置了边框是无。然后,我使用MOveWindow()修改对话框大小,然后将对话框形状更改为多边形区域和应用框架区域。工作正常。

但是当我创建基于对话框的应用程序 Progmatically时,我删除了标题栏和对话框,如下所示:

ModifyStyle(WS_CAPTION,0);
ModifyStyle(WS_DLGFRAME,0)
  • 然后ProgmaticallyI使用MOveWindow()修改了对话框大小,并将对话框形状更改为polygonregion和应用的框架区域。框架未出现在对话框周围。它只在左侧和顶部。

    BOOL CDialogShapeDlg :: OnInitDialog() {     CDialogEx ::的OnInitDialog();

    ModifyStyle(WS_CAPTION,0);
    ModifyStyle(WS_DLGFRAME,0);
    
    CRect rect;
    GetClientRect(&rect);
    MoveWindow(rect.left,rect.top,400,500);
    
    GetClientRect(&rect);
    CPoint vertex[4];
    vertex[0] = CPoint(rect.left,rect.top);
    vertex[1] = CPoint(rect.right,rect.top);
    vertex[2] = CPoint(rect.right,rect.bottom);
    vertex[3] = CPoint(rect.left,rect.bottom);
    
    
    rgn.CreatePolygonRgn(vertex,4,ALTERNATE);
    HGDIOBJ hRgn = rgn.Detach();
    ::SetWindowRgn(GetSafeHwnd(), (HRGN)hRgn, TRUE);
    rgn.CreatePolygonRgn(vertex,4,ALTERNATE);
    return TRUE;  
    

    }

    void CDialogShapeDlg :: OnPaint()     {         CPaintDC dc(this);         CBrush * pBrush =新CBrush(RGB(255,0,0));         dc.FrameRgn(安培; RGN,pBrush,1,1);     }

请帮助解决这个问题。 感谢

1 个答案:

答案 0 :(得分:0)

使用区域是一项高级功能,根据您的代码和问题,您是初学者。您应该阅读有关Windows编程的更多信息。然后你会知道你可能正在使用GetWindowRect()而不是GetClientRect()。 GetClientRect()在窗口的客户端空间坐标中返回窗口客户区的大小。