📄 2004演示代码:demo1.txt+editor.txt
字号:
另一台计算机:打开winword!
Demo1: SDI
任务:模拟一个编辑器,
鼠标双击时输入若干字符--》用户交互
能够在视图窗口回显
能够存盘、下次打开!
第一步:
/* //Doc.h
friend class CDemo1View;
protected: //[沈瑜注]:由于protected,CDemo1View是友元,可直接访问
//'.'沈瑜 2001.12.2
int m_nLineNum;
CStringArray m_strings; //如果用字符指针数组,改用CPtrArray,类似;看MSDN
//.'.沈瑜 2001.12.2
*/
/* //View.h
WM_LBUTTONDBLCLK
{
//to do
int nCount=GetDocument()->m_strings.GetSize();
//取:字串数组中的个数,即已有行数
CString line;
line.Format("这是第%d行:Hello!", nCount+1);
//格式化字符串
((CDemo1Doc*)GetDocument())->m_strings.Add(line);
//添加到文档的字符串数组中
InvalidateRect(NULL);
//刷新屏幕
GetDocument()->SetModifiedFlag();//设置“修改”标志
}
*/
View::OnDraw
{
//to do
int x=20, y=20;
int nCount = ((CDemo1Doc*)GetDocument())->m_strings.GetSize();
CString strMessage;
strMessage.Format( "总共%d行:", nCount );
pDC->TextOut( x, y, strMessage );
for( int i=0;i<nCount;i++ )
{
y+=16;
pDC->TextOut( x, y, ((CDemo1Doc*)GetDocument())->m_strings[i] );
}
}
----可以输入响应了!!
第二步:
以下存盘、打开文件
Doc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
ar << m_nLineNum;
m_strings.Serialize(ar);
}
else
{
// TODO: add loading code here
ar >> m_nLineNum;
m_strings.Serialize(ar);
}
}
第三步:
问题:
Doc::DeleteContents()
{
//to do
m_strings.RemoveAll();
m_nLineNum = 0;
}
EDITOR: //CEditView
<classwizard> =EN_CHANGE
void CEditorView::OnTextChange(...)
{
((CEditorDoc*)GetDocument())->UpdateAllViews(this);
}
OnUpdate(...)
{
if( pSender == NULL )
return;
if( pSender->IsKindOf( RUNTIME_CLASS(CEditorView) ) )
{
CString strMsg;
pSender->GetWindowText(strMsg);
SetWindowText(strMsg);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -