1 实验介绍

此实验是在刚开始接触MFC时做的。它要求实现的功能如下:

  1. 文字跟随鼠标动态移动(跟随移动方式自定)
  2. 修改图标为自己喜欢的图标
  3. 修改窗口标题
  4. 修改文档名称
  5. 可以用菜单项选定指定的颜色显示文字
  6. 可以用工具栏按钮指定要显示文字的颜色
  7. 可以用菜单项选择要显示的文字
  8. 可以用快捷菜单选择要显示的文字
  9. 在状态栏的第一个窗格显示鼠标的移动位置

我做的主题是简单介绍各类面,如鸡蛋面、炸酱面等。点击鼠标左键,然后就会在点击位置出现所选的面条种类的介绍。具体实现步骤如下。

2 实验步骤

2.1 修改程序图标

具体做法看这里:MFC修改图标

下面是修改后我的res文件截图(倒数第二张‘一碗面’就是我的程序图标):

2.2 修改窗口标题

在工程资源视图那找到string table,然后修改如下:

修改红色框框里的那一项,把马赛克位置的文字改为自己喜欢的窗口标题。

2.3 修改文档名称

在类视图中找到DOC结尾的类,找到它的函数OnNewDocument(),并修改如下:

BOOL C“你的工程名”Doc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;// TODO: 在此添加重新初始化代码
// (SDI 文档将重用该文档)
CDocument::SetTitle(L"欢迎查看");//修改引号里的内容为“欢迎查看”或你喜欢的文字return TRUE;
}

2.4 设计菜单栏(选文字和颜色)

将原来的菜单栏删去,改为自己的菜单栏:

增加颜色和文字的子菜单。如:颜色下面增加名为“蓝”的子菜单,ID号为ID_BLUE...等等。我具体添加了什么,看我给出的响应函数就知道了哦。因为响应函数的名字就是ON”ID名“的形式,如ID_BLUE,那其响应函数就是OnBlue()。并为每个子菜单加上ID号,然后根据ID号来写响应消息函数。

/*
颜色响应函数如下:
首先在view类中加一个公共数据 int yanse.用于记录颜色的选择。
*/
void C“你的工程名View::OnYellow()
{
// TODO: 在此添加命令处理程序代码
yanse = 1;
}
void C“你的工程名”View::OnRed()
{
// TODO: 在此添加命令处理程序代码
yanse = 2;
}
void C“你的工程名”View::OnBlue()
{
// TODO: 在此添加命令处理程序代码
yanse = 3;
}
void C“你的工程名”View::OnGreen()
{
// TODO: 在此添加命令处理程序代码
yanse = 4;
}
/*
文字选择的响应函数:
在doc文件中加入公有数据成员:StringDate
初始化: StringData = "想了解更多好吃的面条介绍,请点击菜单栏的文字~ ";
*/
void C“你的工程名”Doc::OnJidanmian()
{
// TODO: 在此添加命令处理程序代码
StringData = "鸡蛋面是一道家常面食,原材料有鸡蛋、面粉、西红柿等.";
}
void C“你的工程名”Doc::OnNiunanmian()
{
// TODO: 在此添加命令处理程序代码
StringData = "牛腩面要先将劲道十足的面下锅,再配上青菜和各种调料,最后在淋上特色牛腩。";
}
void C“你的工程名”Doc::OnLanzhoulamian()
{
// TODO: 在此添加命令处理程序代码
StringData = "兰州拉面是兰州最具特色的大众化经济小吃。";
}
void C“你的工程名”Doc::OnZhajiangmian()
{
// TODO: 在此添加命令处理程序代码
StringData = "炸酱面由菜码、炸酱拌面条而成。";
}

2.5 设计工具栏(选颜色)

工具栏显示可选颜色,将原来的工具栏删去,弄上自己的工具栏,把工具栏颜色按钮的ID号设为对应相同颜色的在菜单栏上的颜色子菜单的ID号一样。同一个ID号使用一个响应函数就行,所以这里就不用再写响应函数了,偷点懒。。

2.6 设计快捷菜单栏(选文字)

新增一个菜单栏,子菜单为可选文字。可选文字的ID要和菜单栏中对应的可选文字一致。然后响应鼠标右键点击的函数:在类向导中,选中类为view类,然后选中消息中的WM_RBUTTONDOWN,然后增加响应。

void C“你的工程名”View::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//ZSR
CPoint pt;
::GetCursorPos(&pt);//获取鼠标坐标
CMenumenu;
//加载菜单
if (!menu.LoadMenuW(IDR_MENU1))
{
return;
}
//获得子菜单
CMenu *pPopupMenu = menu.GetSubMenu(0);//编号为0的子菜单
//弹出菜单
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);CView::OnRButtonDown(nFlags, point);
}

2.7 设计状态栏(显示当前坐标)

增加鼠标移动响应函数:同上在类向导的view类中找到WM_MouseMove,然后写该响应函数:

void C“你的工程名”View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC   dc(this);
CMainFrame *pFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;
CStatusBar *pStatusBar = (CStatusBar *)&pFrame->m_wndStatusBar;
CString   str;
str.Format(_T("(%d,%d)"), point.x, point.y);
CSize size = dc.GetTextExtent(str);
int nIndex = pStatusBar->CommandToIndex(ID_INDICATOR_XXX);
pStatusBar->SetPaneInfo(nIndex, ID_INDICATOR_XXX, SBPS_NORMAL, size.cx);
pStatusBar->SetPaneText(nIndex, str);
CView::OnMouseMove(nFlags, point);
}

2.8 修改OnDraw()函数,如下:

void C“你的工程名字”View::OnDraw(CDC*  pDC)
{C“你的工程名”Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(yanse==1)pDC->SetTextColor(RGB(255,255,0));if(yanse==2)pDC->SetTextColor(RGB(255, 0, 0));if(yanse==3)pDC->SetTextColor(RGB(0,0,255));if(yanse==4)pDC->SetTextColor(RGB(60, 179,113));if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码if (!Flag)//没有伧建过Caret则伧建    {TEXTMETRIC textmetric;   pDC->GetTextMetrics(&textmetric); CreateSolidCaret(textmetric.tmAveCharWidth / 8, textmetric.tmHeight);CaretPosition.x = CaretPosition.y = 0;//位置为0,因为一开头没有输入文字,也就没有文字显示     SetCaretPos(CaretPosition);   ShowCaret(); Flag = true;//标记做好了,以后不再伧建    }HideCaret();//    pDC->TextOut(x, y, pDoc->StringData);//输出字符串StringData    CSize charsize = pDC->GetTextExtent(pDoc->StringData);  CaretPosition.x = x + charsize.cx;//  CaretPosition.y = y;SetCaretPos(CaretPosition);//    ShowCaret();//
}

2.9 鼠标左键响应

增加鼠标左键点击响应函数,具体增加方法参照上面的鼠标右键点击函数的增加。响应函数如下:

/*
鼠标左键点击函数:
*/
void CZSR_作业2_文字随鼠标移动View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//zsr
x = point.x;
y = point.y;
CZSR_作业2_文字随鼠标移动Doc * p = GetDocument();
ASSERT_VALID(p);
//p->StringData.Empty();//清空字符串
//p->
Invalidate();
CView::OnLButtonDown(nFlags, point);
}

3 结果展示

示例:初始样式

示例:蓝色牛腩面

MFC实现文字随鼠标移动相关推荐

  1. mfc键盘控制移动鼠标光标_如何在Windows中使用键盘控制鼠标光标

    mfc键盘控制移动鼠标光标 If you're stuck without a mouse temporarily, don't worry-you can still use your PC. Yo ...

  2. 用Echarts画力导向图,节点文字随鼠标缩放而缩放

    项目场景: 用Echarts画力导向图,节点文字随鼠标缩放而缩放 解决方案: 用原生函数getZr()或_zr()实现,例子如下: this.nodes=[],//节点数据 this.links=[] ...

  3. MFC入门(三)-- MFC图片/文字控件(循环显示文字和图片的小程序)

    惯例附上前几个博客的链接: MFC入门(一)简单配置:http://blog.csdn.net/zmdsjtu/article/details/52311107 MFC入门(二)读取输入字符:http ...

  4. 全网最细海龟 (turtle) 画图讲解 (五):输入/输出文字及鼠标与键盘交互设计

    目录 一.输入/输出文字 1. 输出文字 2. 输入文字 二.鼠标与键盘交互设计 1. 键盘事件 2. 鼠标事件 2.1 获取鼠标点击的位置 3. 计时器 最近博主在 CSDN 上看到许多关于海龟画图 ...

  5. High-speed Charting Control(MFC绘图控件)--MFC绘图Demo(包含鼠标响应)

    首先我们先上效果图,如果你需要这样的Demo请点击此处下载:High-speed Charting Control--MFC绘图Demo 在开始之前,我们首先推荐一篇博客,该博客主要对该控件的英文开发 ...

  6. 在java中怎样做当鼠标选中文字单击鼠标右键出现菜单,定制鼠标右键“新建”菜单选项...

    当您在Windows桌面单击鼠标右键,选择"新建"来建立快捷方式或文件夹时,除了快捷方式与文件夹这2个选项之外,还有一个很长的文件菜单,包含了电脑中安装的一些应用软件,您可以很容易 ...

  7. 【Antdv】input type=number去掉上下箭头、提示文字、鼠标滚轮

    数字输入框在项目中十分常用,但是有一些属性影响使用体验.解决方案如下: 1.整数文字提示 解决方法,将title="" title="" 2.鼠标滚轮会修改数值 ...

  8. C#文字跟随鼠标移动

    原文转自:http://blog.csdn.net/plutus_sutulp/article/details/7817781 1.WinForm中,左击后鼠标右侧会出现文字,会跟随鼠标一起移动.放开 ...

  9. MFC按钮控件鼠标按下抬起响应

    最近在用MFC这个几百年前的架构做工程的时候发现,其按钮控件没有自带鼠标按下和抬起的消息响应函数,因此做了一番研究. 实现很简单,要实自己实现"BOOL PreTranslateMessag ...

  10. MFC实战篇——添加鼠标右键响应菜单

    文章目录 一.新建MFC对话框项目 二.添加菜单资源 三.添加右键响应函数 3.1 方法1:WM_CONTEXTMENU响应函数 3.2 方法2:WM_RButtonDown响应函数 四.添加菜单响应 ...

最新文章

  1. sendmail服务器配置过程中出现的一些错误和解决办法
  2. o oia ospf 路由优先_动态路由OSPF中注入默认路由,原来都是这么玩的,进去看看...
  3. python【力扣LeetCode算法题库】169 多数元素
  4. 【OpenCV3】透视变换——cv::getPerspectiveTransform()与cv::warpPerspective()详解
  5. Linux环境搭建 手把手教你配置Linux虚拟机
  6. MySQL优化之查询缓存(mysql8官方已经废弃这个功能)
  7. 1个人,耗时2年半,这款大型仙侠3D硬核ARPG是怎么做出来的?
  8. Kubernetes + .NET Core 的落地实践
  9. 史上最全java架构师技能图谱(下)
  10. BroadcastChannel页面间通讯
  11. java props_spring:使用prop标签为Java持久属性集注入值
  12. eclipse没有java web,Java-我的Eclipse IDE中缺少Web服务选项
  13. python简单代码示例-python3简单代码示例
  14. ACDsee的安装过程
  15. python编程选股_通达信转python,python编写选股公式
  16. H265 CTU、CU、PU、TU划分的特点及要求
  17. Linux Intel 无线网卡Wifi+蓝牙
  18. Java-Python对垒之质数计算
  19. 车主委托过户和电子委托书
  20. Jasper(2)——简单使用导出PDF报表

热门文章

  1. 查征信 查婚姻状况 查公开的个人信息 学信网学历学位查询 中国执行信息公开网执行人查询 民办院校学位学历查询 国外学历学位查询方法 征信中心 中国裁判文书查询 查询全国的莆田系医院 企查查 天眼查
  2. 数组除重和运用随机点名的简单运用
  3. 概率论的学习和整理--番外4:学习期望之前,先学习平均数(包括算术平均数,几何平均数,调和平均数等),众数,中位数等概念差别。
  4. Windows2012开机启动项设置
  5. E20-591考试必备资料分享
  6. 考研日语线上笔记(六):完型专项篇
  7. 最小角回归算法(LARS)
  8. IT创业项目-赚钱项目-网赚项目:月入2W+的视频号创业项目
  9. 实验室信息化管理系统LIMS手机端二维码应用
  10. 转:嵌入式的经典书籍