mfc修改主窗口风格和窗口类_第1页
mfc修改主窗口风格和窗口类_第2页
mfc修改主窗口风格和窗口类_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、mfc修改主窗口风格和窗口类AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名、窗口是叠加型的、可改变窗口大小等。要修改窗口的缺省风格,需要重载CWnd:PreCreateWindow(CREATESTRUCT& cs)函数,并在其中修改CREATESTRUCT型参数cs。CWnd:PreCreateWindow 函数先于窗口创建函数执行。如果该函数被重载,则窗口创建函数将使用CWnd:PreCreateWindow 函数返回的CREATESTRUCT cs参数所定义的窗口风格来创建窗口;否则使用预定义的窗口风格。CREATESTRUCT结构定义了

2、创建函数创建窗口所用的初始参数,其定义如下:typedef struct tagCREATESTRUCT LPVOID lpCreateParams; / 创建窗口的基本参数HANDLE hInstance; / 拥有将创建的窗口的模块实例句柄HMENU hMenu; / 新窗口的菜单句柄HWND hwndParent; / 新窗口的父窗口句柄int cy; / 新窗口的高度int cx; / 新窗口的宽度int y; / 新窗口的左上角Y坐标int x; / 新窗口的左上角X坐标LONG style; / 新窗口的风格LPCSTR lpszName; / 新窗口的名称LPCSTR lpszC

3、lass; / 新窗口的窗口类名DWORD dwExStyle; / 新窗口的扩展参数 CREATESTRUCT;CREATESTRUCT结构的style域定义了窗口的风格。比如,缺省的MDI主窗口的风格中就包括FWS_ADDTOTITLE(在标题条中显示当前的工作文档名)、FWS_PREFIXTITLE(把文档名放在程序标题的前面)、WS_THICKFRAME(窗口具有可缩放的边框)等风格。由于多种风格参数由逻辑或(“|”)组合在一起的,因此添加某种风格,就只需用“|”把对应的参数加到CREATESTRUCT结构的style域中;删除已有的风格,则需用“&”连接CREATESTRUCT结构的

4、style域与该风格的逻辑非值。CREATESTRUCT结构的x、y、cx、cy域分别定义了窗口的初始位置和大小,因此,在CWnd:PreCreateWindow 函数中给它们赋值,将能定义窗口的初始显示位置和大小。下例中的代码将主框窗口的大小将固定为1/4屏幕,标题条中仅显示窗口名,不显示文档名。BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT cs/ 修改主窗风格cs.style &= F

5、WS_ADDTOTITLE; /去除标题条中的文档名cs.style &= WS_THICKFRAME; /去除可改变大小的边框cs.style |= WS_DLGFRAME; /增加不能改变大小的边框/ 确定主窗的大小和初始位置。int cxScreen = :GetSystemMetrics(SM_CXSCREEN);/获得屏幕宽int cyScreen = :GetSystemMetrics(SM_CYSCREEN); /获得屏幕高cs.x = 0; / 主窗位于左上角cs.y = 0;cs.cx = cxScreen/2; / 主窗宽为1/2屏幕宽cs.cy = cxSc

6、reen/2; / 主窗高为1/2屏幕高return CMDIFrameWnd:PreCreateWindow(cs);修改窗口类,实现更改背景颜色方法一:BOOL CMainWindow:PreCreateWindow(CREATESTRUCT& cs)/ TODO: 在此添加专用代码和/或调用基类if( CFrameWnd:PreCreateWindow(cs)/改变窗口类WNDCLASS wndclass;:GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndclass);/wndclass.hbrBackground = (HBRU

7、SH)(COLOR_3DFACE + 1);/wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);wndclass.hbrBackground=CreateSolidBrush(RGB(0,100,100);wndclass.hbrBackground=m_BKBrush;/m_BKBrush不能为函数局部变量wndclass.hbrBackground=*(new CBrush(RGB(25,25,0);/最方便的方法/wndclass.hCursor = AfxGetApp()- LoadCursor(IDC_CURSOR1

8、);wndclass.lpszClassName = _T(newViewClassName );VERIFY(AfxRegisterClass(&wndclass);cs.lpszClass=wndclass.lpszClassName;return TRUE;return FALSE;方法二:BOOL CMFC_单文档View:PreCreateWindow(CREATESTRUCT& cs)WNDCLASS wndclass;/1.调用基类的同名函数,以自动生成一个窗口类供修改CView:PreCreateWindow(cs);/2.得到窗口类:GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndclass);/3.修改窗口类wndclass.hbrBackground=CreateSolidBrush(RGB(0,100,100);OutputDebugString(wndclass.lpszClassName);/4.更新窗口类/反注册MFC自动生成的窗口类(因为新旧窗口类名称一样):UnregisterClass(cs.lpszClass,AfxGetInstanceHandle(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论