正文

用VC++做一个象模象样的记事本(文本编辑器)2006-12-25 14:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/otot/21912.html

分享到:

1,新建,工程,MFC AppWizard(exe),(名字定一个,例如:TextEdit)。
2,工程选择采用对话框模式。
3,把对话框上的按钮全部删除,并添加一个RICHEDIT控件。
4,打开TextEdit.cpp文件,在“BOOL CTextEditApp::InitInstance()”函数的第一行添加一行:“::AfxInitRichEdit();”
5,打开MFC ClassWizard 的 MemberVariables,为IDC_RICHEDIT1添加一个控件名“m_MyRichEdit”
6,运行一下,可以看到界面了。
7,点“插入”-“资源”,增加一个菜单资源(IDR_MENU1)。
8,打开菜单资源,添加菜单:
“文件”(根目录)
“新建”ID_MEMU_FILE_NEW
“打开”ID_MEMU_FILE_OPEM
“保存”ID_MEMU_FILE_SAVE
“退出”ID_MEMU_FILE_EXIT
“编辑”(根目录)
    。。。等等
9,将菜单资源装入程序中,做法是在对话框类定义中添加以下代码:
class CTextEditDlg : public CDialog
{......
 CMenu m_menu;
......}
然后在对话框类的初始化函数中添加代码:
BOOL CTextEditDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
......
 //加载菜单
 m_menu.LoadMenu(IDR_MENU1);
 //设置当前菜单
 SetMenu(&m_menu);
 //当你不需要菜单时可以用 SetMenu(NULL);来取消当前菜单
......}
10,运行一下,这时候菜单应出现了。
11,然后在MFC ClassWizard 为每个菜单项目添加响应函数,具体代码如下:
void CTextEditDlg::OnMemuFileOpen()
{
//显示文件打开对话框
CFileDialog dlg(TRUE, "SQL", "*.txt",OFN_HIDEREADONLY
|OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||");
if ( dlg.DoModal()!=IDOK ) return;
//获取文件的绝对路径
CString sFileName=dlg.GetPathName();
//打开文件
CStdioFile out;
out.Open(sFileName, CFile::modeRead);
CString sSql="",s;
//读取文件
do{
out.ReadString(s);
sSql=sSql+s+(char)10;
}
while (out.GetPosition()!=out.GetLength());
out.Close();
m_MyRichEdit.SetWindowText(sSql); 
}

void CTextEditDlg::OnMemuFileNew()
{
m_MyRichEdit.SetWindowText(""); 
}

void CTextEditDlg::OnMemuFileSave()
{
//显示文件保存对话框
CFileDialog dlg(FALSE, "SQL", "*.txt",OFN_HIDEREADONLY
| OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||"); if ( dlg.DoModal()!=IDOK ) return;
//获取文件的绝对路径
CString sFileName=dlg.GetPathName();
CStdioFile out;
//打开文件
out.Open(sFileName, CFile::modeCreate | CFile::modeWrite);
//保存文件
CString sSql;
m_MyRichEdit.GetWindowText(sSql);
out.WriteString(sSql);
out.Close();
}

void CTextEditDlg::OnMemuFileExit()
{
exit(0);
}

void CTextEditDlg::OnSize(UINT nType, int cx, int cy) //让RICHEDIT自动填满窗体
{
 CDialog::OnSize(nType, cx, cy);
 // TODO: Add your message handler code here
 CRect rect;
 if (m_MyRichEdit.GetSafeHwnd())
 {
  GetClientRect(&rect);
  //rect.top += 5;
  //rect.DeflateRect(5,5);
  m_MyRichEdit.MoveWindow(rect);
 }
}

8,记得把RICHEDIT的属性中构选Multiline,对话框的属性中构选Title bar、System menu、Minimize box、Maxmize box。
9,再运行一次,文本编辑器做完....

阅读(10379) | 评论(9)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册