改变框架窗口尺寸的关键在于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() 可以用来保存和恢复控制栏的状态。这两个函数可以处理状态栏和贴边工具栏的大小和位置,但不处理浮云工具栏的位置。