MFC 修改窗口样式

之前说过, 修改窗口大小,窗口样式的方法。 这里说明一下修改窗口的图标,光标和背景的方法。

修改窗口大小,样式是在创建窗口的时候进行的,而修改图标,光标和背景是在设计窗口类的时候进行的。 由于MFC封装了相关操作。 所以我们需要将自己写的窗口类应用到MFC的框架中。

 

1. 通过窗口类进行修改

在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)方法中添加窗口类,如:

	WNDCLASS wndcls;
	wndcls.cbClsExtra = 0;
	wndcls.cbWndExtra = 0;
	wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wndcls.hInstance = AfxGetInstanceHandle();
	wndcls.lpfnWndProc = ::DefWindowProc;
	wndcls.lpszClassName = L"eltonCls";
	wndcls.lpszMenuName = NULL;
	wndcls.style = CS_HREDRAW | CS_VREDRAW; // 窗口类的类型,而不是窗口类型


然后再进行注册

RegisterClass(&wndcls);


 最后在CREATESTRUCT中指定窗口类

cs.lpszClass = L"eltonCls";


 由于View是在Frame之上的。 所以上面改的背景色,光标会被view覆盖在下面。 所以同样需要修改View的PreCreateWindow函数,在PreCreateWindow中添加:

cs.lpszClass = L"eltonCls";


 

 这样就可以修改了窗口类的样式。

 

2. 通过MFC的AfxRegisterWndClass全局函数修改

之前为了修改一下图标之类的,构造一个窗口类有点太麻烦, MFC为我们提供了一个全局函数AfxRegisterWndClass

LPCTSTR AFXAPI AfxRegisterWndClass(
   UINT nClassStyle,
   HCURSOR hCursor = 0,
   HBRUSH hbrBackground = 0,
   HICON hIcon = 0 
); 


 这样,利用这个函数,在CMainFrame::PreCreateWindow中的输入:

cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, 0, 0, LoadIcon
		(NULL,IDI_APPLICATION)); 


 在View的PreCreateWindow同样需要输入:

cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_CROSS),
		(HBRUSH)GetStockObject(BLACK_BRUSH), LoadIcon(NULL, IDI_APPLICATION));

 


在窗口创建之后修改:

在窗口创建之后利用SetWindowLong函数来改变窗口的外观,看看函数原型:

?
1
2
3
LONG SetWindowLong(  HWND hWnd,       // handle to window
   int nIndex,      // offset of value to set
   LONG dwNewLong   // new value);

  我们可以在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)调用该函数。与SetWindowLong函数相对应的还有GetWindowLong,用来获取指定窗口的信息。(了解一下)

而在窗口建立后修改光标,背景等,我们可以使用一个类似的函数---SetClassLong(),看看原型

?
1
2
3
DWORD SetClassLong(  HWND hWnd,       // handle to window
   int nIndex,      // index of value to change 
   LONG dwNewLong   // new value);

  至于参数中有那些符合的取值,MSDN中详细介绍。我们使用此函数在Viwe类中的OnCreate()函数调用它。        

PS:AfxGetInstanceHandle()获取程序句柄

宏MAKEINTRESOUCE将一个int型资源转换成与资源管理函数兼容的资源类型——是一个宏!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值