修改框架程序的外观,工具栏、状态栏编程
通过MFC APPWizard生成的窗口,我们可以根据需要修改程序的外观,并对工具栏和状态栏进行编程。
一、修改框架程序的外观:
MFC APPWizard生成的框架窗口,我们可以在需要的时候随时修改它们,首先我们修改框架窗口的类型和大小:
(1)在窗口创建之前修改窗口的类型和大小:
窗口创建之前,会调用PreCreateWindow()函数,我们可以在框架类的该函数中通过CREATESTRUCT结构体修改窗口的类型和大小。例如:
cs.cx=300;
cs.cy=200;
cs.style&=~FWS_ADDTOTITLE;
(2)在窗口创建完成之后修改窗口的类型和大小:
窗口创建完成显示之前会调用框架类的OnCreate()函数显示窗口,因此我们也可以在框架类中调用SetWindowLong()函数修改窗口的类型和大小。例如:
SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) & ~WS_MAXIMIZEBOX);
二、修改窗口的光标、图标和背景
窗口的光标,图标和背景不是在窗口创建的时候设计的,而是在设计窗口类时就已经设计好了,因此要想修改窗口的光标、图标和背景不能像修改窗口的类型和大小那样简便。我们可以有两种方法修改窗口的光标、图标和背景。但是窗口的图标是在框架窗口中的,而光标和背景是在是类窗口中的,所以我们在床架类中只能修改其图标,要想修改光标和背景必须在视类中进行。
(1)在窗口创建之前,在PreCreateWindow()函数中,我们可以重写窗口类,然后注册窗口类,然后让以后窗口的创建按照新的窗口类进行创建。例如:
在框架类中修改图标:
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_HELP);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=AfxGetInstanceHandle();
wndcls.lpfnWndProc=::DefWindowProc;
wndcls.lpszClassName="newwndclass";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);
cs.lpszClass="newwndclass";
在视类中修改光标和背景:
cs.lpszClass="sunxin.org";
(2)以上修改窗口的光标、图标和背景有一点麻烦,特别是只需要修改图标的话就需要重写窗口类。下面我们可以通过两种简便的方法修改光标图标和背景
第一种:在窗口创建之后,在OnCreate()函数中调用SetClassLong()函数修改。
第二种:操作系统提供了一个API函数AfxRegisterWndClass()来很轻松的修改图标光标和背景。
二、工具栏编程
创建工具栏可以有两种方法,可以参看MSDN的CToolBar类的介绍:
方法一:
(1)创建一个工具栏资源
(2)构造一个工具栏对象
(3)用工具栏对象调用Create()函数创建一个工具栏并与工具栏对象相关联
(4)调用LoadToolBar()加载工具栏资源
方法二:
(1)构造一个工具栏对象
(2)用工具栏对象调用Create()函数创建一个工具栏并与工具栏对象相关联
(3)调用LoadBitmap()函数加载包含有工具栏按钮的位图
(4)调用SetButtons()设置按钮的风格并与每个按钮结合一幅位图
以上创建工具栏的方法比较简单,但是要让工具栏能够正常的操作,要设置工具栏的停靠位置和框架窗口的被停靠位置。
例如:
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);//设置工具栏的停靠位置
EnableDocking(CBRS_ALIGN_ANY);//设置框架窗口可以被停靠
DockControlBar(&m_wndToolBar);//停靠工具栏
三、状态栏编程
AppWizard创建的窗口已经带有状态栏,我们可以在他的基础上添加我们想要的功能。具体过程也可以参考MSDN的CStatusBar类的介绍。