(第四版中文版)[十四]可重用框架窗口基类

本文介绍如何通过重载CFrameWnd类的ActivateFrame()方法来改变MFC框架窗口的尺寸与状态,包括窗口的最大化、最小化及位置调整等。此外,还介绍了MFC中注册表访问函数的应用,如SetRegistryKey(), GetProfileInt(), WriteProfileInt(), GetProfileString(), WriteProfileString()等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

改变框架窗口尺寸的关键在于CFrameWnd 类的 ActivateFrame() 。在SDI主框架窗口的创建过程中,应用程序框架会自动调用这个虚成员函数,它的任务是以 nCmdShow 作为参数来调用 CWnd::ShowWindow() 。ShowWindow() 的 nCmdShow 参数决定了窗口是否最大化或者最小化,或者同时最大化和最小化。如果对派生框架类中的 ActivateFrame() 进行重载,可以在 nCmdShow 被传递给 CFrameWnd::ActivateFrame() 之前改变它的值。还可以调用 CWnd::SetWindowPlacement() 来设置框架窗口的位置和尺寸,并且可以设置控制栏的可视状态。不要每次都重新设置窗口的位置及尺寸,“首次”标记数据成员保证了只有当应用程序刚被启动时 ActivateFrame()  才会被调用。

MFC库提供4个CWinApp 成员函数,它们以前处理INI文件,现在则可以访问注册表。AppWizard在应用程序的 InitInstance() 函数里产生了对 CWinApp::SetRegistryKey() 的调用。

SetRegistryKey(_T("Local AppWizard-Generated Applications"));

如果去掉这个调用,那么应用程序不再使用注册表,而是在Windows目录下创建一个INI文件,并使用该文件。

SetRegistyKey() 的字符串建立了最上层的键,后面的注册表函数定义最下面的两层,称为头名和入口名:

GetProfileInt()

WriteProfileInt()

GetProfileString()

WriteProfileString()

为了能够使用注册表访问函数,需要一个指向应用程序对象的指针。调用 AfxGetApp()可以取得。

AfxGetApp()->WriteProfileString("Text Formatting(头名)","Font(入口名)","TimesRoman(值)");

AfxGetApp()->WriteProfileInt("Text Formatting(头名)","Point(入口名)",10(值));

CString 类:LPCTSTR 并不是一个指向 CString 对象的指针,而是一个用来代替 const char* 的 Unicode 版本。

CString::GetBuffer() 可根据给定的大小“锁住”缓冲区,并返回一个 char * ,然后调用 ReleaseBuffer() 使 CString 对象返回到动态状态。

如果不改变字符串内容,可以使用 const char *  或者const CString& ,如果改变可使用 CString& 。

CWnd::GetWindowRect () 返回的是窗口的屏幕坐标,如果窗口被最大化了,那么返回的是整个屏幕的坐标。而 CWnd::GetWindowPlacement() 返回的是窗口未最大化时的坐标,同时还将返回一些用于标识窗口当前是否被最小化了或者最大化了或者是否既被最小化又被最大化了的标记。

GetSystemMetrics() 获得最大化窗口边框的尺寸。

CFrameWnd::SaveBarStatue 和 LoadBarStatus() 可以用来保存和恢复控制栏的状态。这两个函数可以处理状态栏和贴边工具栏的大小和位置,但不处理浮云工具栏的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值