VC编程版超级记事本
小标 2018-08-14 来源 : 阅读 1624 评论 0

摘要:本文主要向大家介绍了VC编程版超级记事本,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程版超级记事本,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

这是学习VC时的一个大作业,超级记事本,突然发现了,传上来供大家学习参考!
一.  功能需求:  
1. 能在原有像记事本程序的基础上添加更多功能:
1).能够改变背景颜色。
2).能够改变字体颜色。
3).能够改变字体。
4). 能够对段落进行对齐等。
二.  总体设计计:
  首先要的申明的是:本程序继承自CRichEditView。
  1.添加“格式(O)”菜单项:
       (1) .添加“字体(F)”子菜单。
        (2).添加“背景颜色(B)”子菜单。
        (3). 添加“字体颜色(T)”子菜单。
  2. 添加一个新的工具栏:
(1).增添“加粗”按钮。
(2).增添“斜体”按钮。
(3).增添“下划线”按钮。
(4).增添“左对齐”、“居中”和“右对齐”按钮。
(5).增添“文本颜色”与“背景颜色“按钮。
 3.状态栏显示时间:
    能够实时显示系统时间。
4.改变应用程序图标:
5. 添加单击右键的弹出式菜单。
三.  详细设计:
 1.添加“格式(O)”菜单项:
   (1) .添加“字体(F)”子菜单:
      添加完菜单后,在视图类中添加其消息响应函数。在此函数中调用通用对话框CFontDialog类,进行字体的改变。
代码如下:
        void CMyWordView::OnFormatFont()                   //设置字体
{
    //TODO: Add your command handler code here
 
    CMyWordDoc*pDoc=GetDocument();
    ASSERT_VALID(pDoc);
    CFontDialogcfd(&pDoc->m_lf,CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT);
    if(cfd.DoModal()==IDOK)     //若点击确定,设置字体
    {  
    CHARFORMATcf;
   cf.cbSize = sizeof (CHARFORMAT);
   cf.dwMask = CFM_FACE | CFM_SIZE;
   ::lstrcpy (cf.szFaceName, cfd.GetFaceName());
    cf.yHeight= cfd.GetSize()*2;
   SetCharFormat (cf);
    }
   
}
     (2).添加“背景颜色(B)”子菜单:
           添加完菜单后,在视图类中添加其消息响应函数。并调用颜色对话框设置颜色。
需要注意的是:
从CRichEditView继承的似乎不适合改背景颜色。写字板中我看了好像没有改变整个背景颜色的功能,只能改字体的背景颜色。
因为改了背景颜色之后,会覆盖先前的文本,必须重新输出,所以
      必须存储以前文本的字体大小、颜色等信息,然后输出。
我的代码是:
 void CMyWordView::OnBkcolor()        //改变背景颜色
{
    //TODO: Add your command handler code here
    CMyWordDoc*pDoc=GetDocument();
    ASSERT_VALID(pDoc);
   CColorDialog dlg;
     CRichEditCtrl& EditCtrl =GetRichEditCtrl();
   CHARFORMAT cf;
   if(dlg.DoModal()==IDOK)
    {
   EditCtrl.SetBackgroundColor(FALSE,dlg.GetColor());  //获取用户所选颜色
  cf.dwMask = CFM_COLOR;
  cf.cbSize = sizeof(CHARFORMAT);
  EditCtrl.GetDefaultCharFormat(cf);
  cf.crTextColor =RGB(0,0,0);                     
  cf.dwEffects &= ~CFE_AUTOCOLOR; 
  EditCtrl.SetDefaultCharFormat(cf);
    }
}
  (3). 添加“字体颜色(T)”子菜单:
        与改变背景颜色类似,都要调用通用对话框—颜色对话框。
  得到用户设置的颜色后,对字符重新设计并输出。
 代码如下:
  void CMyWordView::OnTxtcolor()        //改变字体颜色
{
         //TODO: Add your command handler code here
         CHARFORMATcf;
         CMyWordDoc*pDoc=GetDocument();
         ASSERT_VALID(pDoc);
         CColorDialogdlg;
         if(dlg.DoModal()==IDOK)
         {
           cf.crTextColor=dlg.GetColor();      //获取用户所选颜色
          ZeroMemory(&cf, sizeof(CHARFORMAT));
           cf.crTextColor=dlg.GetColor();
           cf.dwMask=CFM_CHARSET| CFM_COLOR ;
           cf.dwEffects  = cf.dwEffects  & ~CFE_AUTOCOLOR;  //去除原来的颜色效果,改为新的颜色
        SetCharFormat(cf);       //设置
         }
         

2. 添加一个新的工具栏:
 A.首先创建一个新的工具栏:
   首先在资源视图中创建一个新的工具栏资源。
其次,因为工具栏属于框架类,所以在CMainFrame类的OnCreate函数中显示创建一个新的工具栏。可以仿照其自动生成的工具栏。
在资源视图中为新增的工具栏资源增添“加粗”、“斜体”与“下划线”按钮。
      B.利用RichEdit Structure中的CHARFORMAT结构体实现对加粗、斜体与下划线的设置。
  代码如下:
 void CMyWordView::OnCharBold()          //字体是否加粗
{
    //TODO: Add your command handler code here
    CHARFORMATcf;
   cf = GetCharFormatSelection ();
   if (!(cf.dwMask & CFM_BOLD)|| !(cf.dwEffects & CFE_BOLD)) //若原来不是粗体,则改为粗体
        cf.dwEffects = CFE_BOLD;
   else                            //否则,改为原来的字体
        cf.dwEffects = 0;
   cf.dwMask = CFM_BOLD;
   SetCharFormat (cf);
}
其他三个与此类似。
(4).增添“左对齐”、“居中”和“右对齐”按钮。
直接调用CRichEditView类的成员函数OnParaAlign()即可
 void CMyWordView::OnParaLeft() 
{
    //TODO: Add your command handler code here
    OnParaAlign(PFA_LEFT);              //段落左对齐
}
(5).增添“文本颜色”与“背景颜色“按钮:
  这两个工具栏按钮的ID与菜单项中响应单子菜单ID一样即可。
 3.状态栏显示时间:
    能够实时显示系统时间,必须得到系统时间,并设置定时器时时更新。
得到系统时间并显示在状态栏上:
CTimet=CTime::GetCurrentTime();        
CString str=t.Format("%H:%M:%S");       //状态栏显示时间设置
CClientDC dc(this);
CSize sz=dc.GetTextExtent(str);
int index=0;
index=m_wndStatusBar.CommandToIndex(IDS_TIMER);
m_wndStatusBar.SetPaneInfo(index,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_wndStatusBar.SetPaneText(1,str);
SetTimer(1,1000,NULL);//设置定时器
定时器到时后调用下面的函数更新时间并显示:
  void CMainFrame::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
    CTime t=CTime::GetCurrentTime();
CString str=t.Format("%H:%M:%S");
CClientDC dc(this);
CSize sz=dc.GetTextExtent(str);
m_wndStatusBar.SetPaneInfo(1,IDS_TIMER,SBPS_NORMAL,sz.cx);
m_wndStatusBar.SetPaneText(1,str);
CFrameWnd::OnTimer(nIDEvent);
}
4.改变应用程序图标:
   只需将原有的图标擦掉重新画一个。
   注意:改图标必须将两个不同大小的图标都该。
5. 添加单击右键的弹出式菜单。
     在单击右键的消息响应函数中添加设计并显示弹出式菜单:
    voidCMyWordView::OnRButtonUp(UINT nFlags, CPoint point)  //建弹出式菜单
{
    HWND hWnd;
    POINT p;
    GetCursorPos(&p);
    ::ScreenToClient(hWnd,&p);
    CMenu menuPopup;
    if(menuPopup.CreatePopupMenu())
    {
       menuPopup.AppendMenu(MF_STRING,ID_EDIT_UNDO,"撤销(&U)\tCtrl+Z");
       menuPopup.AppendMenu(MF_STRING,ID_EDIT_CUT,"剪切(&C)\tCtrl+X");
       menuPopup.AppendMenu(MF_STRING,ID_EDIT_COPY,"复制(&C)\tCtrl+C");
       menuPopup.AppendMenu(MF_STRING,ID_EDIT_PASTE,"粘贴(&P)\tCtrl+V");
       menuPopup.AppendMenu(MF_STRING,ID_EDIT_SELECT_ALL,"全选(&L)\tCtrl+A");
       menuPopup.AppendMenu(MF_STRING,ID_FORMAT_FONT,"字体(&F)");
       menuPopup.AppendMenu(MF_STRING,IDM_BKCOLOR,"背景颜色(&B)");
       menuPopup.AppendMenu(MF_STRING,IDM_TXTCOLOR,"字体颜色(&T)");
       menuPopup.TrackPopupMenu(TPM_LEFTALIGN,p.x,p.y,this);
    }
    CRichEditView::OnRButtonUp(nFlags,point);
}
 四.测试与实现:
  看书,自己去实现。从刚开始只能输出不能输入,到能够输入但无法换行与删除,
再到能换行与删除去无法处理鼠标。在这一过程中,我学到了很多东西,不仅是知识,更是编程的思想。很多东西并不是我们所想象的。例如,删除的实现是将
原有的字符串取总长度(n-1),并将文字颜色设为背景颜色,再将重新赋值的字符串输出。
由于从CscrollView继承的,有太多需要编写,需花很长时间,若交作业可能连最基本的都无法实现。我决定寒假回去慢慢编写。
最后我从CRichEditView继承,实现了改变字体、字体颜色及背景颜色等功能。同样我从中学到了不少东西。
转载请标明出处:牟尼的专栏 https://blog.csdn.net/u012027907

本程序的优点:增加了文本编辑的扩展功能,使其能编辑丰富的文字。
本程序的缺点:界面设计仍显老旧,功能有限。应向写字板或Word等看齐,虽不能与其一样,但尽量像其界面,并能实现其1/5的功能就非常好了。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言VC/MFC频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved