记事本的基本功能

记事本的基本功能已经都实现:采用的是CEdit类实现,包括打开文件,保存文件,粘贴,复制剪切等等:
 
1:
[cpp] view plaincopyprint?
1.//实现菜单栏目下 复制的功能  
2.void CNotePadDlg::OnEditCopy()   
3.{  
4.    CEdit * pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
5.    pEdit->Copy();  
6.}  
7.  
8.//实现菜单栏目下 删除的功能  
9.void CNotePadDlg::OnEditClear()   
10.{  
11.    CEdit * pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
12.    pEdit->Clear();  
13.}  
14.//实现菜单栏目下 撤销的功能  
15.void CNotePadDlg::OnEditUndo()   
16.{  
17.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
18.    pEdit ->Undo();    
19.}  
20.  
21.//实现菜单栏目下 剪切的功能  
22.void CNotePadDlg::OnEditCut()   
23.{  
24.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
25.    pEdit ->Cut();  
26.}  
27.//实现菜单栏目下 全选的功能  
28.void CNotePadDlg::OnEditSelectAll()   
29.{  
30.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
31.    pEdit ->SetSel(0,-1);      
32.}  
33.//实现菜单栏目下 粘贴的功能  
34.void CNotePadDlg::OnEditPaste()   
35.{  
36.      
37.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
38.    pEdit ->Paste();   
39.}  
40.//实现菜单栏目下 时间的功能  
41.void CNotePadDlg::OnEditDate()   
42.{  
43.    CTime t = CTime::GetCurrentTime();  
44.  
45.    CString str = t.Format(“%Y年%m月%d日 %H:%M:%S”);  
46.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
47.    pEdit ->ReplaceSel( str,TRUE);  
48.}  

2:
[cpp] view plaincopyprint?
1.//实现移动窗口大小的功能;记得修改窗口属性当中的值  
2.void CNotePadDlg::OnSize(UINT nType, int cx, int cy)   
3.{  
4.    CDialog::OnSize(nType, cx, cy);  
5.      
6.    CWnd* pEdit = GetDlgItem(IDC_TEXT);  
7.    if(pEdit)  
8.        pEdit->MoveWindow(0,0,cx,cy);  
9.      
10.}  
11.  
12.//实现菜单下退出的功能  
13.void CNotePadDlg::OnFileExit()   
14.{  
15.    if(Prompt() == 0) //如果等于0,代表选择了取消,那么不关闭对话框  
16.    {  
17.        //不做任何处理  
18.    }  
19.    else//如果不等于0 那么代表选择了 否  直接关闭对话框  
20.    {  
21.        EndDialog(IDCANCEL);      
22.    }  
23.          
24.}  

3:
[cpp] view plaincopyprint?
1.//实现关于对话框的显示  
2.void CNotePadDlg::OnHelpAbout()   
3.{  
4.    CAbout dlg;  
5.    dlg.DoModal();  
6.      
7.}  
8.  
9.//禁用esc退出程序  
10.void CNotePadDlg::OnCancel()   
11.{  
12.    //CDialog::OnCancel();  
13.}  
14.  
15.//重载OnClose()实现X的退出功能  
16.void CNotePadDlg::OnClose()   
17.{  
18.    OnFileExit();//这里调用菜单下的退出函数  
19.    //EndDialog(IDCANCEL);  
20.    //CDialog::OnClose();  
21.}  

4:
[cpp] view plaincopyprint?
1.//实现菜单栏目下另存为的功能  
2.void CNotePadDlg::OnFileSaveAs()   
3.{  
4.      
5.    LPCTSTR szFilter = “文本文件(.txt)|.txt|所有文件(.)|.||”;  
6.    //初始化文件对话框 FALSE代表保存文件  
7.    CFileDialog filedlg(FALSE,”txt”,”11”,OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST|  
8.        OFN_FILEMUSTEXIST|OFN_CREATEPROMPT,szFilter);  
9.    //打开文件对话框  
10.    if(IDCANCEL == filedlg.DoModal())  
11.        return;  
12.    //得到文件对话框中选择文件的路径名  
13.    CString szFile = filedlg.GetPathName();  
14.  
15.    //声明一个CFile对象  
16.    CFile file;  
17.    //打开文件  
18.    if( file.Open(szFile,CFile::modeWrite|CFile::modeCreate) == 0)  
19.    {  
20.        MessageBox(filedlg.GetFileName()+”保存文件时失败!”, NULL,MB_ICONEXCLAMATION);  
21.        return;  
22.    }  
23.  
24.    //当前文件为该文件,保存下来  
25.    m_szCurrentFile = szFile;  
26.  
27.    CString strText;  
28.    //得到IDC_TEXT控件里面的内容   
29.    GetDlgItemText(IDC_TEXT,strText);  
30.    //文件写入,第一个参数是要写入的内容,第二个是写入内容的长度  
31.    file.Write(strText,strText.GetLength());  
32.  
33.    /* 
34.1:  Flush是将缓冲区的内容写入文件,并清空。缓冲区是4k的内容,够4k了, 
35.    就会自动写入文件,不够的话就需要flush一下,如果不flush的话,文件 
36.    的最后有可能会少一些内容  
37.2:  Flush()的作用是刷新缓冲区,如果你在write()完成后调用了Close(), 
38.    那缓冲区的那部分数据就丢失了,因为数据时先写入内存然后在读进文件了。 
39.    所以在调用Close()前把缓冲区的数据强行输出,这样才不会丢失数据。 
40.3:  flush()的作用是强制将缓冲区的数据写入磁盘,只是为了确保数据尽快被写入,但是其实如果小量数据就用flush(),那么硬盘写入的机械操作时间是相对比较长的, 
41.    如果不调用flush(),缓冲区达到一定的数据量就会自动写入磁盘。 
42.    在关闭文件的时候也会把缓冲区的数据(如果有)强制写入磁盘 
43.4:  如果不是多线程写同一个文件,可以不用flush(), 
44.    最后结束前记得close就可以,当然也可以最后flush一次,再close  
45.    */  
46.    file.Flush();//上面的解释跟清除了,我看这个就明白了,相信你也一样  
47.  
48.    file.Close();//关闭文件,删除对象!  
49.  
50.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
51.    pEdit ->SetModify(FALSE);  
52.    SetTitle();  
53.      
54.}  

5:
[cpp] view plaincopyprint?
1.//实现菜单栏目下打开的功能  
2.void CNotePadDlg::OnFileOpen()   
3.{  
4.    //过滤器  
5.    LPCTSTR szFilter = “文本文件(.txt)|.txt|所有文件(.)|.||”;  
6.    //打开一个文件选择对话框 TRUE代表 打开文件  
7.    CFileDialog filedlg(TRUE,”txt”,”11”,OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST,  
8.        szFilter);  
9.    if(IDCANCEL== filedlg.DoModal())  
10.        return;  
11.    //打开文件并显示到IDC_TEXT当中  
12.    OpenFile(filedlg.GetPathName(),filedlg.GetFileName());  
13.}  
14.  
15.void CNotePadDlg::OpenFile(CString szFilePath, CString szFileName)  
16.{  
17.  
18.    CFile file;//声明一个CFile对象  
19.  
20.    //打开一个文件  
21.    if(file.Open(szFilePath,CFile::modeRead) == 0)  
22.    {  
23.        MessageBox(szFileName+”打开文件失败!”,NULL,MB_ICONEXCLAMATION);  
24.        return;  
25.    }  
26.    /* 
27.    int size = file.GetLength();//得到文件的长度 
28.    char* pText = new char[size+1];//要读入文件缓冲区的指针 
29. 
30.    //将CFile对象file相关联文件的数据读入缓冲。 
31.    int nRet = file.Read(pText,size); 
32.    file.Close();//关闭对象 
33.    */  
34.  
35.    //第二种方法  
36.    CFileStatus fs;  
37.    file.GetStatus(fs);  
38.    char *pText = new char[fs.m_size+1];  
39.    memset(pText,0,fs.m_size+1);  
40.    int nRet = file.Read(pText,fs.m_size);  
41.    file.Close();  
42./* 
43.    这里解释一下你打开文件有可能是乱码,那是因为你要打开的文件是unicode或者其他不是ANSI的格式 
44.    怎么看你要打开的文件是什么格式? 
45.    用记事本打开你要打开的文件,然后另存为,你就会看到你的这个文件是什么格式的了。当你把它改为ANSI格式 
46.    就不会出现乱码了! 
47.*/  
48.    pText[nRet] = 0;//把最后置为0 结尾  字符串结尾要为\0;  
49.    m_szCurrentFile = szFilePath;//把当前文件路径设置为当前打开的文件路径  
50.  
51.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
52.    pEdit->SetWindowText(pText);  
53.    pEdit ->SetModify(FALSE);  
54.  
55.    SetTitle();  
56.  
57.}  

6:
[cpp] view plaincopyprint?
1.//实现菜单栏目下保存的功能  
2.void CNotePadDlg::OnFileSave()   
3.{  
4.    //如果要保存的文件是第一次保存,那么就转换到 另存为  
5.    if(m_szCurrentFile.GetLength() == 0)  
6.    {  
7.        OnFileSaveAs();  
8.        return;  
9.    }  
10.      
11.    CFile file;  
12.    if(file.Open(m_szCurrentFile,CFile::modeWrite|CFile::modeCreate) == 0)  
13.    {     
14.        OnFileSaveAs();  
15.        return;  
16.      
17.    }  
18.  
19.    CString szText;  
20.    GetDlgItemText(IDC_TEXT,szText);//得到Edit控件里面的内容  
21.    file.Write(szText,szText.GetLength());//写入file对象  
22.    file.Close();//关闭对象  
23.          
24.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT) ;  
25.    pEdit ->SetModify(FALSE);//FALSE表示文本没有改变;这里直接保存,点击退出的时候不要再提示改变  
26.  
27.}  

7:
[cpp] view plaincopyprint?
1.//实现菜单栏下新建的功能  
2.void CNotePadDlg::OnFileNew()   
3.{  
4.    //处理文件改变的情况;如果在我们新建一个文件的时候,改变了原来存在的文件  
5.    //如果==0;代表取消,那么直接返回,表示取消新建的任务  
6.    //如果!=0; 那么就可能保存当前文件或者不保存当前文件  
7.    if(Prompt() == 0)  
8.        return;  
9.  
10.    //然后下面就是新建文件的任务。  
11.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
12.    pEdit->SetWindowText(“”);  
13.    m_szCurrentFile = “”;  
14.    SetTitle();  
15.  
16.      
17.}  

8:
[cpp] view plaincopyprint?
1.//处理文件修改的情况  
2.BOOL CNotePadDlg::Prompt()  
3.{  
4.    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);  
5.    if(pEdit->GetModify())//如果文件被修改  
6.    {  
7.        CString str;  
8.        if(m_szCurrentFile.IsEmpty())//如果当前的文件为空,则str= 无标题  
9.            str = “无标题”;  
10.        else  
11.            str = m_szCurrentFile; //否则就是 现在打开文件的Path  
12.  
13.        int nRet = MessageBox(str+”\r\n已经被修改,是否保存?”,”提示消息”,  
14.            MB_YESNOCANCEL|MB_ICONEXCLAMATION);  
15.  
16.        if(IDCANCEL == nRet)//如果选择了  取消,那么不做任何处理,也不关闭对话框(在退出函数中做处理)  
17.            return FALSE;  
18.        if(IDNO == nRet) //如果选择了 否 直接关闭对话框(在退出函数当中做处理)  
19.            return TRUE;  
20.        else//如果选择了 是 保存文件  
21.            OnFileSave();  
22.    }  
23.  
24.    return TRUE;  
25.}  
26.  
27.//设置上面的标题  
28.void CNotePadDlg::SetTitle()  
29.{  
30.    CString str;  
31.    if(m_szCurrentFile.IsEmpty())  
32.        str = “无标题”;  
33.    else  
34.        str = m_szCurrentFile;  
35.  
36.    int i = str.ReverseFind(‘\’); //反向找到 \  
37.    if(i > 0)  
38.        str = str.Mid(i+1); //从\位置处 截出str后面的内容  
39.  
40.    SetWindowText(str);  
41.}  

9:
[cpp] view plaincopyprint?
1.//实现菜单栏目下字体选择的功能  
2.void CNotePadDlg::OnFormatFont()   
3.{  
4.      
5.    CFont* pFont = GetDlgItem(IDC_TEXT)->GetFont();  
6.    LOGFONT lf;  
7.    pFont->GetLogFont(&lf);//获得当前CFont对象的LOGFONT结构体的拷贝  
8.    CFontDialog fd(&lf);//构造字体对话框,初始选择字体为当前CFont对象的字体  
9.  
10.    if(IDCANCEL == fd.DoModal())  
11.        return;  
12.    m_font.DeleteObject();//如果m_font已经关联了一个字体资源对象,则释放它  
13.    m_font.CreateFontIndirect(fd.m_cf.lpLogFont);//使用选定字体的LOGFONT创建新的字体   
14.//  m_font.CreateFontIndirect(&lf);  
15.    GetDlgItem(IDC_TEXT)->SetFont(&m_font);//选定字体  
16.      
17.}  

 
10:
[cpp] view plaincopyprint?
1.//实现拖一个文件进入的功能  
2.void CNotePadDlg::OnDropFiles(HDROP hDropInfo)   
3.{     
4.    if(!Prompt())  
5.        return;  
6.    char szFile[MAX_PATH];  
7.    UINT n = DragQueryFile(hDropInfo,0,szFile,sizeof(szFile));  
8.    CString str = szFile ;  
9.    n = str.ReverseFind(‘\’);  
10.    if(n>0)  
11.    {  
12.        str = str.Mid(n+1);  
13.        OpenFile(szFile,str);  
14.    }  
15.  
16.    CDialog::OnDropFiles(hDropInfo);  
17.}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值