设为首页 加入收藏

TOP

VC版超级记事本(一)
2014-11-23 17:31:42 】 浏览:367
Tags:超级 记事本

这是学习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.CommandToI

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇窗体皮肤实现 - 在VC中简单实现绘.. 下一篇VC只用GDI实现位图展现简单特效

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目