关于框架类和视图类的PreCreateWindow函数的重载!!

框架类:

 static LPCSTR classname=NULL;

 if( !CFrameWnd::PreCreateWindow(cs) )
  return FALSE;
 // TODO: Modify the Window class or styles here by modifying
 //  the CREATESTRUCT cs
    if(classname==NULL)
 {
  WNDCLASS wndcls;
  ::GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndcls);
 
  wndcls.lpszClassName="MyClass1";
  wndcls.hIcon=AfxGetApp()->LoadIcon(ID_MYICON);
  AfxRegisterClass(&wndcls);
  classname="MyClass1";
 }
 cs.lpszClass="MyClass1";
    
 
 return TRUE;

视图类:

 // TODO: Modify the Window class or styles here by modifying
 //  the CREATESTRUCT cs

 cs.lpszClass=AfxRegisterWndClass(CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW ,AfxGetApp()->LoadCursor(IDC_MYCURSOR),
  (HBRUSH)GetStockObject(WHITE_BRUSH));
 return CView::PreCreateWindow(cs);

 

一些理解:

AfxRegisterClass函数只有一个WNDCLASS结构的参数,该函数用来注册窗口类。

AfxRegisterWndClass函数有四个参数,第一参数是窗口类型,第二个参数是指针句柄,第三个参数是背景画刷句柄,第四个参数是图标句柄。

 

从上面的参数可以看出AfxRegisterClass函数需要一个完整的WNDCLASS结构作为参数,因此为了方便一般在使用该函数前用GetClassInfo取得一个已经注册的窗口类(一般是在CFrameWnd::PreCreateWindow(cs)注册的),之后再修改WNDCLASS结构的某些成员(这也是重载PreCreateWindow函数的主要任务,当然为了注册修改后的类,必须将该结构的类名改了)。 最后将类名给cs结构的lpszClass成员。因为后面的窗口创建函数CreateWindowEx会用到。

 

重载视图类的PreCreateWinodw函数会发现,CView::PreCreateWindow(cs)是在最后调用的,因此没有完整的已经注册的窗口类可用,因此用AfxRegisterWndClass函数修改相关参数。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值