使用MFC生成多文档应用程序时,会自动生成CMainFrame类和CChildFrame类,要修改窗口的样式,可以在CChildFrame的PreCreateWindow方法中进行修改,如下:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式
if( !CMDIChildWndEx::PreCreateWindow(cs) )
return FALSE;
cs.style = WS_CHILD | WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU
| FWS_ADDTOTITLE | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE;
return TRUE;
}
是通过指定CREATESTRUCT结构体中的style属性来修改的。
msdn中CREATESTRUCT结构体的定义如下:
CREATESTRUCT结构体定义了传递给应用程序窗口过程的一些初始化参数,这些参数与 CreateWindowEx 函数的参数是一样的。
typedef struct tagCREATESTRUCT
{ LPVOID lpCreateParams;
HINSTANCE hInstance;
HMENU hMenu;
HWND hwndParent;
int cy; int cx; int y; int x;
LONG style;
LPCTSTR lpszName;
LPCTSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCT, *LPCREATESTRUCT;
参数说明:
lpCreateParams
包含可能用于创建窗口的一些额外的数据。如果这个窗口是通过CreateWindow函数或者CreateWindowEx函数调用创建的,这个参数包含特定函数调用中的 lpParam 属性值。
如果正在创建的这个窗口是一个多文档(MDI,mulitple-document interface)客户窗口,这个参数包含一个指向 CLIENTCREATESTRUCT结构体的指针。如果正在创建的这个窗口是一个多文档子窗口,这个参数包含一个指向MDICREATESTRUCT结构体的指针。
hInstance
拥有这个新窗的实例句柄。
hMenu
新窗口的菜单句柄。
hwndParent
如果这个窗口是一个子窗口,则这个参数表示父窗口的句柄。如果这个窗口是被拥有的,则这个参数表示拥有者的句柄。如果这个窗口既不是一个子窗口也不是被拥有的窗口,则这个参数为NULL。
cy
指定新窗口的高度,单位是像素。
cx
指定新窗口的宽度,单位是像素。
y
指定新窗口的左上角的y坐标。如果这个新窗口是子窗口,坐标值是相对于父窗口的。否则,这个坐标值相对于屏幕的原点。
x
指定新窗口的左上角的x坐标。如果这个新窗口是子窗口,坐标值是相对于父窗口的。否则,这个坐标值相对于屏幕的原点。
style
指定新窗口的样式,这些窗口样式是微软已经定义好了的。window中的窗口样式这里列举了msdn中所有的窗体样式。
lpszName
指向一个表示新窗口名称的非结束符的字符串
lpszClass
一个非结束符的字符串或者表示新窗口类名的字符串
dwExStyle
指定新窗口的一些扩展样式
备注:
如果要获得窗口的类的名字,不要使用lpszClass,使用GetClassName这个函数。