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)
学习脚本类型-进阶
学习脚本类型-基础