修改应用程序外观

窗口风格的修改

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所派生的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值