MFC 实现记事本功能 .

 

 

记事本的基本功能已经都实现:采用的是CEdit类实现,包括打开文件,保存文件,粘贴,复制剪切等等:

 

1:

  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. }  
//实现菜单栏目下 复制的功能
void CNotePadDlg::OnEditCopy() 
{
	CEdit * pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
    pEdit->Copy();
}

//实现菜单栏目下 删除的功能
void CNotePadDlg::OnEditClear() 
{
	CEdit * pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit->Clear();
}
//实现菜单栏目下 撤销的功能
void CNotePadDlg::OnEditUndo() 
{
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit ->Undo();	
}

//实现菜单栏目下 剪切的功能
void CNotePadDlg::OnEditCut() 
{
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit ->Cut();
}
//实现菜单栏目下 全选的功能
void CNotePadDlg::OnEditSelectAll() 
{
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit ->SetSel(0,-1);	
}
//实现菜单栏目下 粘贴的功能
void CNotePadDlg::OnEditPaste() 
{
	
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit ->Paste();	
}
//实现菜单栏目下 时间的功能
void CNotePadDlg::OnEditDate() 
{
	CTime t = CTime::GetCurrentTime();

	CString str = t.Format("%Y年%m月%d日 %H:%M:%S");
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit ->ReplaceSel( str,TRUE);
}


2:

  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. }  
//实现移动窗口大小的功能;记得修改窗口属性当中的值
void CNotePadDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	CWnd* pEdit = GetDlgItem(IDC_TEXT);
	if(pEdit)
		pEdit->MoveWindow(0,0,cx,cy);
	
}

//实现菜单下退出的功能
void CNotePadDlg::OnFileExit() 
{
	if(Prompt() == 0) //如果等于0,代表选择了取消,那么不关闭对话框
	{
		//不做任何处理
	}
	else//如果不等于0 那么代表选择了 否  直接关闭对话框
	{
		EndDialog(IDCANCEL);	
	}
		
}


3:

  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. }  
//实现关于对话框的显示
void CNotePadDlg::OnHelpAbout() 
{
	CAbout dlg;
	dlg.DoModal();
	
}

//禁用esc退出程序
void CNotePadDlg::OnCancel() 
{
	//CDialog::OnCancel();
}

//重载OnClose()实现X的退出功能
void CNotePadDlg::OnClose() 
{
	OnFileExit();//这里调用菜单下的退出函数
	//EndDialog(IDCANCEL);
	//CDialog::OnClose();
}


4:

  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. }  
//实现菜单栏目下另存为的功能
void CNotePadDlg::OnFileSaveAs() 
{
	
	LPCTSTR szFilter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
	//初始化文件对话框 FALSE代表保存文件
	CFileDialog filedlg(FALSE,"txt","11",OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST|
		OFN_FILEMUSTEXIST|OFN_CREATEPROMPT,szFilter);
	//打开文件对话框
	if(IDCANCEL == filedlg.DoModal())
		return;
	//得到文件对话框中选择文件的路径名
	CString szFile = filedlg.GetPathName();

	//声明一个CFile对象
	CFile file;
	//打开文件
	if( file.Open(szFile,CFile::modeWrite|CFile::modeCreate) == 0)
	{
		MessageBox(filedlg.GetFileName()+"保存文件时失败!", NULL,MB_ICONEXCLAMATION);
		return;
	}

	//当前文件为该文件,保存下来
	m_szCurrentFile = szFile;

	CString strText;
	//得到IDC_TEXT控件里面的内容 
	GetDlgItemText(IDC_TEXT,strText);
	//文件写入,第一个参数是要写入的内容,第二个是写入内容的长度
	file.Write(strText,strText.GetLength());

	/*
1:	Flush是将缓冲区的内容写入文件,并清空。缓冲区是4k的内容,够4k了,
	就会自动写入文件,不够的话就需要flush一下,如果不flush的话,文件
	的最后有可能会少一些内容 
2:  Flush()的作用是刷新缓冲区,如果你在write()完成后调用了Close(),
	那缓冲区的那部分数据就丢失了,因为数据时先写入内存然后在读进文件了。
	所以在调用Close()前把缓冲区的数据强行输出,这样才不会丢失数据。
3:  flush()的作用是强制将缓冲区的数据写入磁盘,只是为了确保数据尽快被写入,但是其实如果小量数据就用flush(),那么硬盘写入的机械操作时间是相对比较长的,
	如果不调用flush(),缓冲区达到一定的数据量就会自动写入磁盘。
	在关闭文件的时候也会把缓冲区的数据(如果有)强制写入磁盘
4:  如果不是多线程写同一个文件,可以不用flush(),
	最后结束前记得close就可以,当然也可以最后flush一次,再close 
	*/
	file.Flush();//上面的解释跟清除了,我看这个就明白了,相信你也一样

	file.Close();//关闭文件,删除对象!

	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit ->SetModify(FALSE);
	SetTitle();
	
}


5:

  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. }  
//实现菜单栏目下打开的功能
void CNotePadDlg::OnFileOpen() 
{
	//过滤器
	LPCTSTR szFilter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
	//打开一个文件选择对话框 TRUE代表 打开文件
	CFileDialog filedlg(TRUE,"txt","11",OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST,
		szFilter);
	if(IDCANCEL== filedlg.DoModal())
		return;
	//打开文件并显示到IDC_TEXT当中
	OpenFile(filedlg.GetPathName(),filedlg.GetFileName());
}

void CNotePadDlg::OpenFile(CString szFilePath, CString szFileName)
{

	CFile file;//声明一个CFile对象

	//打开一个文件
	if(file.Open(szFilePath,CFile::modeRead) == 0)
	{
		MessageBox(szFileName+"打开文件失败!",NULL,MB_ICONEXCLAMATION);
		return;
	}
	/*
	int size = file.GetLength();//得到文件的长度
	char* pText = new char[size+1];//要读入文件缓冲区的指针

	//将CFile对象file相关联文件的数据读入缓冲。
	int nRet = file.Read(pText,size);
	file.Close();//关闭对象
	*/

	//第二种方法
	CFileStatus fs;
	file.GetStatus(fs);
	char *pText = new char[fs.m_size+1];
	memset(pText,0,fs.m_size+1);
	int nRet = file.Read(pText,fs.m_size);
	file.Close();
/*
	这里解释一下你打开文件有可能是乱码,那是因为你要打开的文件是unicode或者其他不是ANSI的格式
	怎么看你要打开的文件是什么格式?
	用记事本打开你要打开的文件,然后另存为,你就会看到你的这个文件是什么格式的了。当你把它改为ANSI格式
	就不会出现乱码了!
*/
	pText[nRet] = 0;//把最后置为0 结尾  字符串结尾要为\0;
	m_szCurrentFile = szFilePath;//把当前文件路径设置为当前打开的文件路径

	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit->SetWindowText(pText);
	pEdit ->SetModify(FALSE);

	SetTitle();

}


6:

  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. }  
//实现菜单栏目下保存的功能
void CNotePadDlg::OnFileSave() 
{
	//如果要保存的文件是第一次保存,那么就转换到 另存为
	if(m_szCurrentFile.GetLength() == 0)
	{
		OnFileSaveAs();
		return;
	}
	
	CFile file;
	if(file.Open(m_szCurrentFile,CFile::modeWrite|CFile::modeCreate) == 0)
	{	
		OnFileSaveAs();
		return;
	
	}

	CString szText;
	GetDlgItemText(IDC_TEXT,szText);//得到Edit控件里面的内容
	file.Write(szText,szText.GetLength());//写入file对象
	file.Close();//关闭对象
		
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT) ;
	pEdit ->SetModify(FALSE);//FALSE表示文本没有改变;这里直接保存,点击退出的时候不要再提示改变

}


7:

  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. }  
//实现菜单栏下新建的功能
void CNotePadDlg::OnFileNew() 
{
	//处理文件改变的情况;如果在我们新建一个文件的时候,改变了原来存在的文件
	//如果==0;代表取消,那么直接返回,表示取消新建的任务
	//如果!=0; 那么就可能保存当前文件或者不保存当前文件
	if(Prompt() == 0)
		return;

	//然后下面就是新建文件的任务。
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	pEdit->SetWindowText("");
	m_szCurrentFile = "";
	SetTitle();

	
}


8:

  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. }  
//处理文件修改的情况
BOOL CNotePadDlg::Prompt()
{
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
	if(pEdit->GetModify())//如果文件被修改
	{
		CString str;
		if(m_szCurrentFile.IsEmpty())//如果当前的文件为空,则str= 无标题
			str = "无标题";
		else
			str = m_szCurrentFile; //否则就是 现在打开文件的Path

		int nRet = MessageBox(str+"\r\n已经被修改,是否保存?","提示消息",
			MB_YESNOCANCEL|MB_ICONEXCLAMATION);

		if(IDCANCEL == nRet)//如果选择了  取消,那么不做任何处理,也不关闭对话框(在退出函数中做处理)
			return FALSE;
		if(IDNO == nRet) //如果选择了 否 直接关闭对话框(在退出函数当中做处理)
			return TRUE;
		else//如果选择了 是 保存文件
 			OnFileSave();
	}

	return TRUE;
}

//设置上面的标题
void CNotePadDlg::SetTitle()
{
	CString str;
	if(m_szCurrentFile.IsEmpty())
		str = "无标题";
	else
		str = m_szCurrentFile;

	int i = str.ReverseFind('\\'); //反向找到 \\
	if(i > 0)
		str = str.Mid(i+1); //从\\位置处 截出str后面的内容

	SetWindowText(str);
}


9:

  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. }  
//实现菜单栏目下字体选择的功能
void CNotePadDlg::OnFormatFont() 
{
	
	CFont* pFont = GetDlgItem(IDC_TEXT)->GetFont();
	LOGFONT lf;
	pFont->GetLogFont(&lf);//获得当前CFont对象的LOGFONT结构体的拷贝
	CFontDialog fd(&lf);//构造字体对话框,初始选择字体为当前CFont对象的字体

	if(IDCANCEL == fd.DoModal())
		return;
	m_font.DeleteObject();//如果m_font已经关联了一个字体资源对象,则释放它
	m_font.CreateFontIndirect(fd.m_cf.lpLogFont);//使用选定字体的LOGFONT创建新的字体 
//	m_font.CreateFontIndirect(&lf);
	GetDlgItem(IDC_TEXT)->SetFont(&m_font);//选定字体
	
}


 

10:

  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. }  
//实现拖一个文件进入的功能
void CNotePadDlg::OnDropFiles(HDROP hDropInfo) 
{	
	if(!Prompt())
		return;
	char szFile[MAX_PATH];
	UINT n = DragQueryFile(hDropInfo,0,szFile,sizeof(szFile));
	CString str = szFile ;
	n = str.ReverseFind('\\');
	if(n>0)
	{
		str = str.Mid(n+1);
		OpenFile(szFile,str);
	}

	CDialog::OnDropFiles(hDropInfo);
}


源码下载地址:点击打开链接

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值