第九章(程序外观)

///改变窗口外观(大小,位置,窗口style之类,总之就是CreateWindow()里面可以设置的)

(1)在窗口创建之前改变

在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)函数里有参数CREATESTRUCT& cs这个参数,这个参数是个结构体,里面的成员是CreateWindow()函数的各个参数,改变这个参数的值,就能在创建窗口之前改变它的外观

(2)在窗口创建完成之后改变

12345 LONG SetWindowLong(     
HWND hWnd,               // handle to window     
int nlndex,              // offset of value to set     
LONG dwNewLong           // new value ); 
第二个参数:
GWL_ID
-12
设置一个新的 窗口 标识符
GWL_STYLE
-16
设定一个新的窗口风格。
GWL_WNDPROC
-4
为窗口过程设定一个新的地址。

创建完之后再改变,就应该在OnCreate()函数里面调用这个函数了,CMainFrame::OnCreate()函数里面会调用基类的OnCreate()函数创建窗口,在return 之前调用这个函数就能改变窗口的风格了。

 

//改变窗口光标,图标,背景

窗口的光标,图标和背景这些参数都是设计窗口类的时候确定的,那个CREATESTRUCT参数里面并没得改,SetWindowLong()函数也没得改。

(1)在窗口创建之前修改

虽然CREATESTRUCT结构体没有Icon,Cursor这些参数,但是它有lpszClass这个参数,只要自己写个新的窗口类并且注册,让那个参数创建我们自己写的窗口类就能得到修改了的图标,光标和背景之类了。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: 在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式
	WNDCLASS cls;
	cls.cbClsExtra=0;
	cls.cbWndExtra=0;
	cls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
	cls.hCursor=LoadCursor(NULL,IDC_HAND);
	cls.hIcon=LoadIcon(NULL,IDI_ERROR);
	cls.hInstance=AfxGetInstanceHandle();//这个AfxGetInstanceHandle()函数返回的就是当前应用程序的实例句柄
	cls.lpfnWndProc=::DefWindowProc;
	cls.lpszClassName=_T("myclass");
	cls.lpszMenuName=NULL;//菜单并不是在设计窗口的时候创建的,设为NULL,不会影响菜单的建立
	cls.style=CS_HREDRAW | CS_VREDRAW;

	RegisterClass(&cls);
	cs.lpszClass=_T("myclass");
	cs.style=WS_OVERLAPPEDWINDOW;
	return TRUE;
}

这里还有个要注意的,视类窗口覆盖在主框架上,对光标和背景的修改会被覆盖掉,所以应该在View类的PreCreateWindow()函数里也把cs.lpszClass修改了才行。

除此之外还有利用AfxRegisterWndClass(UNIT nClassStyle,HCURSOR hCursor=0,HBRUSH hBrush=0,HICON hIcon=0);函数返回值就直接是注册之后的类名,直接赋给cs.lpszclass就能改变背景,图标,光标了。

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

 

(2)创建窗口之后修改

主要是利用
 

DWORD WINAPI SetClassLong(
  _In_  HWND hWnd,
  _In_  int nIndex,
  _In_  LONG dwNewLong
);


参数一:指定要设置属性的窗口句柄      参数二:GCL_HBRBACKGROUND(设置新画刷)      GCL_HCURSOR(设置新光标)    GCL_HICON(设置新图标)

参数三:新的属性(记得强制转型为LONG)

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值