mfc关闭主窗口,mfc窗口设计

  mfc关闭主窗口,mfc窗口设计

  AppWizard生成的应用框架主窗口有默认的窗口样式,比如在窗口标题栏自动添加文档名称,叠加窗口,改变窗口大小等。要修改窗口的默认样式,需要重载cwnd:pre create window(CREATESTRUCT cs)函数,并修改其中的create struct参数cs。

  CWnd:PreCreateWindow函数在窗口创建函数之前执行。如果该函数重载,窗口创建函数将使用CWnd:PreCreateWindow函数返回的CREATESTRUCT cs参数定义的窗口样式创建窗口;否则,将使用预定义的窗口样式。

  CREATESTRUCT结构定义用于创建函数创建窗口的初始参数,定义如下:

  【cpp】查看plaincopyprint?

  typedefstructtagCREATESTRUCT { LPVOIDlpCreateParams;//创建窗口的基本参数HANDLEhInstance//拥有要创建的窗口的模块实例句柄HMENUhMenu//新窗口的菜单句柄HWNDhwndParent//新窗口的父窗口句柄intcy//新窗口的高度intcx//新窗口的宽度inty//新窗口左上角的Y坐标intx//新窗口左上角的X坐标LONGstyle//新窗口LPCSTRlpszName的样式;//新窗口的名称LPCSTRlpszClass。//新窗口DWORDdwExStyle的窗口类名;//新窗口的扩展参数} CREATESTRUCTtypedef结构标记CREATESTRUCT {

  LPVOID lpCreateParams//创建窗口的基本参数

  处理hInstance//拥有将要创建的窗口的模块实例句柄

  HMENU hMenu//新窗口的菜单句柄

  HWND hwndParent//新窗口的父窗口句柄

  int cy//新窗口的高度

  int cx//新窗口的宽度

  int y;//新窗口左上角的Y坐标

  int x;//新窗口左上角的X坐标

  长款;//新窗口的样式

  LPCSTR lpszName//新窗口的名称

  LPCSTR lpszClass//新窗口的窗口类名

  DWORD dwExStyle//新窗口的扩展参数

  } CREATESTRUCT

  CREATESTRUCT结构的样式字段定义了窗口的样式。比如MDI主窗口的默认样式有FWS_ADDTOTITLE(在标题栏显示当前工作文档名)、WS _前缀TITLE(将文档名放在程序标题前面)、WS_THICKFRAME(窗口有可缩放边框)等样式。由于各种样式参数是由逻辑OR(“”)组合而成,要添加某个样式,只需用“”将相应的参数添加到CREATESTRUCT结构的style字段中即可;要删除一个已有的样式,需要使用" "将CREATESTRUCT结构的样式字段与样式的逻辑非值连接起来。

  CREATESTRUCT结构的x、Y、cx和cy字段分别定义了窗口的初始位置和大小。因此,在CWnd:PreCreateWindow函数中为它们赋值将定义窗口的初始显示位置和大小。

  以下示例中的代码将主框架窗口的大小固定为屏幕的1/4,标题栏中只显示窗口名称,而不显示文档名称。

  【cpp】查看plaincopyprint?

  boocmainframe:precreate window(createstructcs){//todo:modifythewindowclassstylesherebymodifying//thecreatestructcs//修改主窗口样式cs . style=~ FWS _ addto title;//从标题栏中删除文档名cs.style=~ WS _ THICKFRAME//删除可调整大小的边框cs.style =WS _ DLGFRAME//添加一个大小不能改变的边框//确定主窗口的大小和初始位置intcxscreen=:getSystemmetrics(sm _ CX screen);//获取屏幕宽度intcyscreen=:GetSystemmetrics(sm _ cy screen);//获取屏幕高度cs . x=0;//主窗口在左上角cs . y=0;cs . CX=CX screen/2;//主窗口宽度为1/2屏幕宽度cs . cy=CX screen/2;//主窗口高度为屏幕高度的1/2。返回CMDIFrameNews:PrecreateWindow(CS);} BOOL CMainFrame:pre create window(create struct cs)

  //TODO:通过修改来修改此处的窗口类或样式

  //创建结构cs

  //修改主窗口样式

  cs . style=~ FWS _ ADDTOTITLE;//从标题栏中删除文档名称

  cs.style=~ WS _ THICKFRAME//删除可以调整大小的边框

  cs.style =WS _ DLGFRAME//添加无法调整大小的边框

  //确定主窗口的大小和初始位置

  int CX screen=:GetSystemMetrics(SM _ CX screen);//获取屏幕宽度

  int cy screen=:GetSystemMetrics(SM _ cy screen);//获取屏幕高度

  cs . x=0;//主窗口位于左上角

  cs . y=0;

  cs . CX=CX screen/2;//主窗口宽度是屏幕宽度的1/2。

  cs。cy=cxcr in/2;//主窗高为二分之一屏幕高

  返回cmdiframe wnd:预创建窗口(cs);

  修改窗口类,实现更改背景颜色

  方法一:

  [cpp]视图plaincopyprint?

  boolcmain window:预创建窗口(创建trut cs){//全部:在此添加专用代码和/或调用基类if(cfremwnd:pre create window(cs)){//改变窗口类wndclasswndclass*获取类信息(afxgetinstancehandle()、cs.lpszClass、wndcclass);//wndcclass。hbrberbackground=(hbrush)(color _ 3d face 1);//wndcclass。hbrberbackground=(hbrush)getstockoobject(black _ brush);wndcclass。hbrberbackground=createsolidb ush(RGB(0,100,100));wndcclass。hbrberbackground=m _ bkk brush//m _ bbrush(消歧义)不能为函数局部变量wndcclass。hbrberbackground=*(new cbrush(RGB(25,25,0));//最方便的方法//wndcclass。HC cursor=afx getap()-load cursor(IDC _ cursor 1);wndcclass。lpsz class name=_ t( new view class name );校验(afxregistrclasse(wndc class));cs。lpsz bool cmainwindow:预创建窗口(创建trut cs)

  //全部:在此添加专用代码和/或调用基类

  if(cfremwnd:预创建窗口(cs))

  //改变窗口类

  wndclass wndclass

  *获取类信息(afxgetinstancehandle()、cs.lpszClass、wndc class);

  //wndcclass。hbrberbackground=(hbrush)(color _ 3d face 1);

  //wndcclass。hbrberbackground=(hbrush)getstockoobject(black _ brush);

  wndcclass。hbrberbackground=createsolidb ush(RGB(0,100,100));

  wndcclass。hbrberbackground=m _ bkk brush//m _ bbrush(消歧义)不能为函数局部变量

  wndclass。hbrbackground=*(新CBrush(RGB(25,25,0));//最方便的方法

  //wndcclass。HC cursor=afx getap()-load cursor(IDC _ cursor 1);

  wndcclass。lpsz class name=_ t( new view class name );

  校验(afxregistrclasse(wndc class));

  利普什足球俱乐部

  方法二:

  [cpp]视图plaincopyprint?

  波旁道单文档视图:预创建窗口(创建trut cs){ wndclaswndcclass;//1 .调用基类的同名函数,以自动生成一个窗口类供修改cvview:预创建窗口(cs);//2 .得到窗口类*获取类信息(afxgetinstancehandle()、cs.lpszClass、wndc class);//3 .修改窗口类wndcclass。hbrberbackground=createsolidb ush(RGB(0,100,100));输出调试字符串(wndcclass。lpsz类名);//4 .更新窗口类//反注册MFC(消歧义)自动生成的窗口类(因为新旧窗口类名称一样):UnregisterClass(cs.lpszClass、afxgetinstancehandle());//注册修改后的窗口类afxregistrclasse(wnd class);//因为新旧窗口类名称一样,不必执行下面这句代码//lpsz足球俱乐部

  莉特德换酒问题迅速发生的系统

  莉特德种花问题迅速发生的系统

  莉特德排序数组迅速发生的系统

  保留、释放、解除锁定与保留帐户(保留计数)的源码分析

  千伏后[对象类]与object_getClass(对象id)的结果竟会不一致?

  反应堆的一些总结(与视图(视图)的比较学习)

  函数式编程-小记

  打字稿(脚本类型)学习-进阶(2)

  学习脚本类型-进阶

  学习脚本类型-基础

mfc关闭主窗口,mfc窗口设计