窗口风格的修改
1、窗口的风格和外观可以在窗口创建前修改,就是在函数()中,因为窗口类在创建窗口的时候先经过这个函数,可以修改这个函数中的tm结构(这个结构的参数实际同创建窗口时的CreateWindow的参数一样的,例如只在框架类中修改某些属性,但是没有在视图类中修改,那么视图类的某些属性就会覆盖这些值而没有修改的效果了)
在创建了窗口之后仍然可以在OnCreate函数中使用函数GetWindowLong和SetWindowLong函数来警告窗口类型的信息或者修改窗口的属性。
例子:
cs.cy=300;
cs.style&=~FWS_ADDTOTITLE;
cs.lpszName=_T("我要创建这个程序");
就可以改变程序的标题了,但是如果在视图类的相恋函数中做修改中做修改就没有效果
在CMainFrame类中的OnCreate函数中添加。
SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);
SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);
//注意的每个窗口类的派生类中都有成员变量m_hWnd
可以禁用最大化的按钮,而在视图类中进行添加仍然没有效果,如果确实要在视图类中进行修改,就需要这样调用
类似的,对于客户区的修改,只能在视图类中进行修改才有效
实际上,自己可以在PreCreateWindow函数中自己写一个窗口类,然后进行注册,再将cs的窗口类的类名进行修改就可以了
BOOLCMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if(!CFrameWnd::PreCreateWindow(cs) )
returnFALSE;
//TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
//cs.cx=200;
//cs.cy=300;
//cs.style&=~FWS_ADDTOTITLE;
//cs.style=WS_OVERLAPPEDWINDOW;
//cs.lpszName=_T("我要创建这个程序");
WNDCLASSwndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_IBEAM);
wndcls.hInstance=AfxGetInstanceHandle();
wndcls.lpfnWndProc=::DefWindowProc;
wndcls.lpszClassName=_T("我的程序");
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&wndcls);
cs.lpszClass=_T("我的程序");
cs.dwExStyle&= ~WS_EX_CLIENTEDGE;
cs.lpszClass= AfxRegisterWndClass(0);
returnTRUE;
}
WNDCLASS类
WNDCLASS结构体包含窗口类的属性,它是由RegisterClass函数注册的。
成员:
Style
标识类的类型,它可以和class styles 类型任何一个相结合。
Class styles
CS_VREDRAW |
如果移动或者调整客户区的高度,就会涂歌重绘整个窗口。
CS_HREDRAW
如果移动或者调整客户区的宽度,就会涂歌重绘整个窗口。
lpfnWndProc
window进程的一个指针,你必须使用CallWindowProc功能来调用window进程。
cbClsExtra
标识
hbrBackground
为背景画刷的句柄。这个成员可以是用来描绘背景的一具实例句柄,也可以是颜色值。一种颜色值一定是下面标准系统颜色中之一。一旦值被给出,你需要把它转换为HBRUSH类型。
COLOR_ACTIVEBORDER
COLOR_ACTIVECAPTION
COLOR_APPWORKSPACE
COLOR_BACKGROUND
COLOR_BTNFACE
COLOR_BTNSHADOW
COLOR_BTNTEXT
COLOR_CAPTIONTEXT
COLOR_GRAYTEXT
COLOR_HIGHLIGHT
COLOR_HIGHLIGHTTEXT
COLOR_INACTIVEBORDER
COLOR_INACTIVECAPTION
COLOR_MENU
COLOR_MENUTEXT
COLOR_SCROLLBAR
COLOR_WINDOW
COLOR_WINDOWFRAME
COLOR_WINDOWTEXT
一个SDI的案例
在一个单文档的应用程序中,一个默认的框架窗口类型是由WS_OVERLAPPEDWINDOW and FWS_ADDTOTITLEstyles两个类型相结合产生的,FWS_ADDTOTITLE是MFC特定的一种类型
用来为文档标题的窗口Caption。要在SDI应用程序中来改变一窗口的属性,就需要加载PreCreateWindow函数,它所在的类是由CFrameWnd所派生的。