友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
C语言实例教程(PDF格式)-第42部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
case SB_ENDSCROLL:
break;
case SB_LINEDOWN:
iTop++;
break;
case SB_LINEUP:
iTop…;
break;
case SB_PAGEDOWN:
iTop += d_clHeight;
break;
case SB_PAGEUP:
iTop …= d_clHeight;
break;
case SB_THUMBPOSITION:
iTop = nPos;
break;
case SB_THUMBTRACK:
iTop = nPos;
break;
case SB_TOP:
iTop = 0;
break;
…………………………………………………………Page 485……………………………………………………………
}
// Check range of new index;
iTop = max (iTop; 0);
iTop = min (iTop; d_cLines d_clHeight);
// If no change; ignore。
if (iTop == d_iTopLine) return;
// Pixels to scroll = (lines to scroll) * height…per…line。
int cyScroll = (d_iTopLine iTop) * d_cyLineHeight;
// Define new top…line value。
d_iTopLine = iTop;
// Scroll pixels。
ScrollWindow(0; cyScroll);
// Adjust scroll thumb position。
SetScrollPos(SB_VERT; d_iTopLine; TRUE);
}
//…………………………………………………………………………………………………………………………………………………………………………………………………………
// WM_WININICHANGE message handler。
void DMainFrame::OnWinIniChange(LPCTSTR lpszSection)
{
CFrameWnd::OnWinIniChange(lpszSection);
// Get new background & foreground colors in case these have changed。
d_crForeground = GetSysColor(COLOR_WINDOWTEXT);
d_crBackground = GetSysColor(COLOR_WINDOW);
// Force redraw of window。
Invalidate();
}
…………………………………………………………Page 486……………………………………………………………
//Microsoft Developer Studio generated resource script。
//
#include 〃resource。h〃
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource。
//
#include 〃afxres。h〃
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Chinese (P。R。C。) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE; SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
〃resource。h0〃
…………………………………………………………Page 487……………………………………………………………
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
〃#include 〃〃afxres。h〃〃rn〃
〃0〃
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
〃#include 〃〃resfilelist。rc2〃〃 // non…Microsoft Visual C++ edited resourcesrn〃
〃rn〃
〃#define _AFX_NO_SPLITTER_RESOURCESrn〃
〃#define _AFX_NO_OLE_RESOURCESrn〃
〃#define _AFX_NO_TRACKER_RESOURCESrn〃
〃#define _AFX_NO_PROPERTY_RESOURCESrn〃
〃#include 〃〃afxres。rc〃〃 t// Standard ponentsrn〃
〃0〃
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems。
IDR_MAINFRAME ICON DISCARDABLE 〃resfilelist。ico〃
/////////////////////////////////////////////////////////////////////////////
…………………………………………………………Page 488……………………………………………………………
//
// Menu
//
IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
POPUP 〃&File〃
BEGIN
MENUITEM 〃&Open。。。〃; ID_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM 〃E&xit〃; ID_APP_EXIT
END
POPUP 〃&Format〃
BEGIN
MENUITEM 〃&Font。。。〃; ID_FORMAT_FONT
MENUITEM SEPARATOR
MENUITEM 〃&Expand Tabs〃; ID_FORMAT_TABS
END
POPUP 〃&Help〃
BEGIN
MENUITEM 〃&About FileList。。。〃; ID_APP_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
…………………………………………………………Page 489……………………………………………………………
IDD_ABOUTBOX DIALOG DISCARDABLE 34; 22; 217; 55
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION 〃About filelist〃
FONT 8; 〃MS Sans Serif〃
BEGIN
LTEXT 〃filelist Version 1。0〃;IDC_STATIC;40;10;119;8
LTEXT 〃Copyright 〃;IDC_STATIC;40;25;119;8
DEFPUSHBUTTON 〃OK〃;IDOK;176;6;32;14;WS_GROUP
CONTROL 〃〃;IDC_STATIC;〃Static〃;SS_BLACKFRAME;8;8;22;19
ICON IDR_MAINFRAME;IDC_STATIC;8;8;21;20
END
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1;0;0;1
PRODUCTVERSION 1;0;0;1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
…………………………………………………………Page 490……………………………………………………………
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK 〃StringFileInfo〃
BEGIN
BLOCK 〃040904b0〃
BEGIN
VALUE 〃panyName〃; 〃0〃
VALUE 〃FileDescription〃; 〃FILELIST MFC Application0〃
VALUE 〃FileVersion〃; 〃1; 0; 0; 10〃
VALUE 〃InternalName〃; 〃FILELIST0〃
VALUE 〃LegalCopyright〃; 〃Copyright 0〃
VALUE 〃OriginalFilename〃; 〃FILELIST。EXE0〃
VALUE 〃ProductName〃; 〃FILELIST Application0〃
VALUE 〃ProductVersion〃; 〃1; 0; 0; 10〃
END
END
BLOCK 〃VarFileInfo〃
BEGIN
VALUE 〃Translation〃; 0x409; 1200
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// String Table
…………………………………………………………Page 491……………………………………………………………
//
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
IDR_MAINFRAME 〃FileListnnFilelinnnFilelist。DocumentnFileli Document〃
END
STRINGTABLE PRELOAD DISCARDABLE
BEGIN
AFX_IDS_APP_TITLE 〃FileList〃
END
#endif // Chinese (P。R。C。) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource。
//
#include 〃resfilelist。rc2〃 // non…Microsoft Visual C++ edited resources
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#include 〃afxres。rc〃 // Standard ponents
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file。
…………………………………………………………Page 492……………………………………………………………
// Used by filelist。rc
//
#define IDD_ABOUTBOX 100
#define IDR_MAINFRAME 128
#define ID_FORMAT_FONT 32771
#define ID_FORMAT_TABS 32772
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 130
#define _APS_NEXT_MAND_VALUE 32773
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
// stdafx。h : include file for standard system include files;
// or project specific include files that are used frequently; but
// are changed infrequently
//
#include // MFC core and standard ponents
#include // MFC extensions
// stdafx。cpp : source file that includes just the standard includes
// filelist。pch will be the pre…piled header
// stdafx。obj will contain the pre…piled type information
…………………………………………………………Page 493……………………………………………………………
#include 〃stdafx。h〃
第五节 视类
在本章的前面部分,我们已经涉及到了一些视类及其派生类的用法,
在本章的后面几节中,我们还结合例程讲解了一些常用的类,由此,
在本节中,我们计划仅就各类作一简明的介绍,至于各类的具体应
用,我们认为,通过例程来了解,熟悉各类的使用,远较简单地讲解
原理更容易掌握。但我们也需要提醒读者的是,由于我们的篇幅原
因,我们的讲解只可能涉及其中的最主要的部分,至于读者如果希望
更深入地对系统的体系结构作了解的话,参考系统的随机帮助文件是
一个相当重要,也相当方便的途径。
在这一节中,我们会按照各类在MFC中的层次讲解,由于面向对象语
言的自身特性,父类所具有的特征,其派生出来的子类一般也具有该
特性,因此,掌握各类的派生关系,往往是深刻理解其行为的一个捷
径。同时,我们也应该看到,由于各类与其父类的差别,它们又具有
各式各样的自身的特性,而把握这些特性,又成为进一步理解其独特
特征的必由之路。下面,我们分类简单地讲解一下视类及各视类派生
类。
首先,我们看看处于这些派生类基类位置的CView类在整个系统类体
系中的位置。
图8。17 类CView的继承示意图
由图8。17我们可以看出,类CWnd为类CView的直接基类。从这里,我
们至少可以得到的一个最基本的概念就是,视类的对象具有窗口的一
些基本特性。视类CView是一个用户定义视类的常用基类。一个视类
与一个文档相连接,在文档与用户之间起了一个桥梁的作用。视类,
文档,窗口之间的关系有对象CDocTemplate刻画。当用户新开一个窗
口或将一个窗口进行分割时,程序框架就构造一个与其文档相联系的
视类。一个视只能对应于一个文档,但一个文档可以拥有多个视,因
此,就使一个文档,多个视图的程序可以轻易地实现。在本章的稍后
几节中,读者会发现几个这方面的例程,读者可以看看它们的实现是
多么的轻松。视的主要功能在于显示和修改文档的数据,但它对文档
…………………………………………………………Page 494……………………………………………………………
数据的存储没有什么支持。
一个视类可以直接地接受文档的数据,也可以通过成员函数的调用来
实现。
当一个类的数据发生变化时,该文档所关联的视类通常通过调用函数
CDocument::UpdateAllViews来作出响应。这个函数是维护数据正确
显示的常用手段。
视类CView具有为数不多的成员函数。但这些成员函数中的很多个是
有着重要的意义的。函数OnBeginPrinting初始化打印,
OnEndPrinting结束一个打印任务,而OnEndPrintPreview则更是关于
打印预览操作的一个重要函数,而函数OnPreparePrinting则负责了
对打印以及打印预览的全面支持。
另外,视类中的两个成员函数OnDraw (该函数在屏幕发生变化或因为
焦点的变易需要重绘时调用,没有该函数,就不可能在程序的切换后
保证屏幕的正确显示),OnUpdate则对维护程序的正确显示负有重要
的责任。(当一个文档发生变化时,绝大多数情况下总是希望其各个
视图中的数据能得到同步的正确显示的。)函数UpdateAllViews则是
实现单文档多视图程序不可缺少的手段。(在一个文档的任一视发生
变化时,通过该类实现各视图的正确显示。)
接下来我们看看视类各派生类的继承及成员函数情况。但是,在这
里,我们不再准备对各派生类作详细介绍。但是,我们会尽量简捷地
告诉读者,怎样从系统的庞大帮助数据库中,查到自己所需要的信
息。
(1) 类CEditView
其继承关系如图8。18。注意,该类的直接基类不是CView类,而是类
CCtrlView。
图8。18 类CEditView的继承图解
…………………………………………………………Page 495……………………………………………………………
类CEditView主要被设计来支持类似编辑控件所要实现的功能,通过
打印,查找/替换的支持。它们拥有自己的内存,可以在程序中被任
意正确地使用。我们常见的文本操作,基本上都是由该类支持实现
的。
(2) 类CRichEditView
类CRichEditView的继承层次如图8。19。
该类主要提供Rich文本操作的支持 (Rich文本是既可以为文本,也可
以为图形的一种特殊格式文本。同时,在很多场合下,它们也充当热
字的角色。)
图8。19 类CRichEditView的继承图解
(3) 类CTreeView
类CTreeView的继承层次如图8。20。
图8。20 类CTreeView的继承图解
该类主要提供一些树型控件所实现的功能的支持。它使一种数据的显
示方式可以更富于变化。
(4) 类ListView
类CListView的继承层次如图8。21。
…………………………………………………………Page 496……………………………………………………………
图8。21 类CListView的继承图解
该类与类CTreeView一样,更多的好处在于提供了一种简捷地实现数
据的不同显示的途径。为数据的组织提供多种手段。
(5) 类CScrollView
类CScrollView的继承层次如图8。22。
图8。22 类CScrollView的继承图解
该类也是一个比较重要的类,但它主要提供视图的滚动显示。同时,
需要注意的是,该类的直接基类是类CView,这决定了其动作特点的
特殊性。具体细节请参考系统帮助。
在本节的最后,我们简要地谈一下怎样在系统庞大的帮助文件中快速
准确地找到自己所需要的主题。
Visual C++提供的帮助支持数据库不可谓不大,但往往在这个庞大的
支持面前,我们多少感到一些无从下手。下面,我们结合程序设计时
最可能碰到的一些关于类及函数的查询。
如图8。23,我们以查询有关打印支持操作的类CPrintDialog的情况的
查询。首先,工作区键入CPrintDialog然后按F1,系统搜索其数据库
后给出了帮助信息。单击之即可进入具体的帮助主题了。
…………………………………………………………Page 497……………………………………………………………
图8。23 查询结果显示
第六节 同一文档的多个视
启动Visual C++下的App Wizard 可以生成多文档程序,这只需要在
第一步中选择MDI应用程序类型即可。从生成的MDI程序中,我们可以
发现MDI程序与SDI程序的一个最主要的区别就是主窗口是由基类
CMDIFrameWnd而不象在SDI程序中由CFrameWnd派生出来的。
class CMainFrame : public CMDIFrameWnd
{
DECLARE_DYNAMIC(CMainFrame)
public:
CMainFrame();
// 。。。
}
在最初的文档模板中 (文档被打开时被激活)只支持主窗口。这可以
由下面的一段初始化代码中看出(摘自CMDIApp。cpp)。
BOOL CMdiApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable; you should remove from the following
…………………………………………………………Page 498……………………………………………………………
// 。。。
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_MDITYPE;
RUNTIME_CLASS(CMdiDoc);
RUNTIME_CLASS(CChildFrame); // custom MDI child frame
RUNTIME_CLASS(CMdiView));
AddDocTemplate(pDocTemplate);
// 。。。
return TRUE
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!