- BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
- {
- if( !CFrameWnd::PreCreateWindow(cs) ) // 先调用父类的PreCreateWindow
- return FALSE;
- // TODO: Modify the Window class or styles here by modifying
- // the CREATESTRUCT cs
- cs.dwExStyle &= ~WS_EX_CLIENTEDGE; // 去掉Frame客户区的3D边缘效果
- cs.lpszClass = AfxRegisterWndClass(0); // 设置Frame的风格是默认风格,即CS_DBLCLKS、IDC_ARROW、NULL_BRUSH、IDI_WINLOGO
- return TRUE;
- }
关于以下代码的认识:
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
cs.lpszClass = AfxRegisterWndClass(0);
使用&和~可以从二进制位中去掉宏所代表的掩码,这里的宏是WS_EX_CLIENTEDGE,即Window Style Client Edge的缩写,该宏指定了一种3D效果,即将客户区的边缘略微凹陷与外框之中,有一种3D的美感;
这里必须去掉Frame的这种效果,因为其有效客户区使用View代替的,因此应该将View的外框(View一旦成为Frame的子窗口则View将不具有标题栏、外框,而整个View窗口都将是客户区的样式,因此View的外框就等价于View的客户区,整个View的图形都是客户区!)定义成该效果,如果两边都定义该效果会重复!
如果AfxRegisterWndClass的第一个参数nClassStyle为0则使用上面注释中的默认样式;