修改框架程序的外观,工具栏、状态栏编程

通过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类的介绍。

posted @ 2011-09-15 22:35  乘风736  阅读(3001)  评论(0编辑  收藏  举报