很菜的问题——如何在单文档视图区响应消息来显示字符

reyo7 2006-04-05 06:15:51
比如单击鼠标左键,视图区就显示一个指定的字符
——别问偶是谁了,一看就知道是菜鸟。谢谢!
...全文
436 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2006-06-11
  • 打赏
  • 举报
回复
还没见解决吗?
菜牛 2006-04-13
  • 打赏
  • 举报
回复
别忘了#include <afxtempl.h>,放在...View.h的类声明前面。
reyo7 2006-04-13
  • 打赏
  • 举报
回复
不过还是很感谢Mackz和大家!
reyo7 2006-04-13
  • 打赏
  • 举报
回复
我的妈,132个错误,得慢慢调了!
菜牛 2006-04-10
  • 打赏
  • 举报
回复
生成一个SDI程序。
在C...View的头文件...view.h中,添加一个自定义结构:
typedef struct _MY_DATA
{
CPoint ptString;
CString strContent;
}MY_DATA;

添加C...View类的成员变量(别忘了#include <afxtempl.h>)
CArray<MY_DATA, MY_DATA*> m_arContent;

在C...View::OnDraw(CDC *pDC)中:
POSITION pos = m_arContent.GetHeadPosition();
while (pos)
{
MY_DATA *pContent = (MY_DATA*)m_arContent.GetNext(pos);
if (!(pContent->strContent.IsEmpty()))
pDC->TextOut(pContent->ptString.x, pContent->ptString.y, pContent->strContent);
}

在C...View::OnLButtonDown(UINT nFlags, CPoint point)中:
MY_DATA *pData = new MY_DATA;
pData->ptString = point;
pData->strContent.Format(_T("(%d, %d)"), point.x, point.y);
m_arContent.Add(pData);
Invalidate();

在C...View::~C...View()中:
POSITION pos = m_arContent.GetHeadPosition();
while (pos)
{
MY_DATA *pContent = (MY_DATA*)m_arContent.GetNext(pos);
delete pContent;
}
m_arContent.RemoveAll();


代码没有调试,可能有语法错误,自己调试一下。
reyo7 2006-04-09
  • 打赏
  • 举报
回复
另外还有个问题,就是我希望前面在视图显示的字符还留在窗体上,并不会因为重新点击鼠标而消失只显示新的字符
reyo7 2006-04-09
  • 打赏
  • 举报
回复
谢谢Mackz我已改过来了
菜牛 2006-04-08
  • 打赏
  • 举报
回复
我不知道你是不是拷贝了我的代码,不过C/C+++是区分大小写的。
reyo7 2006-04-07
  • 打赏
  • 举报
回复
'm_ptcontent'还要在哪里声明啊?
reyo7 2006-04-07
  • 打赏
  • 举报
回复
Mackz兄照你说的添加代码编译生成2个错误:f:\projects\hook\hook\hookview.cpp(60) : error C2065: 'm_ptcontent' : undeclared identifier
f:\projects\hook\hook\hookview.cpp(60) : error C2228: left of '.y' must have class/struct/union
type is ''unknown-type''
reyo7 2006-04-06
  • 打赏
  • 举报
回复
用消息处理函数调用OnDraw么?就是不知道这个消息处理函数怎么写呀!
菜牛 2006-04-06
  • 打赏
  • 举报
回复
最简单的:
生成一个SDI程序。
添加C...View类的成员变量
CString m_strContent;
CPoint m_ptContent;

在C...View::OnDraw(CDC *pDC)中:
if (!m_strContent.IsEmpty())
pDC->TextOut(m_ptContent.x, m_ptcontent.y, m_strContent);

在C...View::OnLButtonDown(UINT nFlags, CPoint point)中:
m_ptContent = point;
m_strContent = _T("Left Button Clicked Here!");
Invalidate();

在C...View::OnRButtonDown(UINT nFlags, CPoint point)中:
m_ptContent = point;
m_strContent = _T("Right Button Clicked Here!");
Invalidate();

在C...View::OnLButtonDblClk(UINT nFlags, CPoint point)中:
m_ptContent = point;
m_strContent = _T("Left Button Double Clicked Here!");
Invalidate();

wltg2001 2006-04-06
  • 打赏
  • 举报
回复
你问得不太清楚,根据鼠标点击的消息而产生的字符,但是鼠标消息并不是很多,如果你想左击显示一种字符,右击显示另一种字符,你就多写几个消息处理函数不就得了。
lily_123567 2006-04-06
  • 打赏
  • 举报
回复
用SetCapture()捕获所有鼠标消息,然后处理,程序结束的时候ReleaseCapture()
aa3000 2006-04-06
  • 打赏
  • 举报
回复
hook 鼠标事件,然后在事件响应中保存要显示的字符并且调用 InvalidateRect,OnDraw 判断是否需要显示字符。
wltg2001 2006-04-06
  • 打赏
  • 举报
回复
消息总是以WM_开头的,具体的你去参MSDN吧!
wlwlxj 2006-04-05
  • 打赏
  • 举报
回复
把点击次数和字符存储,在OnDraw里面显示
reyo7 2006-04-05
  • 打赏
  • 举报
回复
这个我知道,我的意思是如何鼠标点击一下就显示一个字符,也就是显示字符是根据鼠标点击的消息而产生的
lily_123567 2006-04-05
  • 打赏
  • 举报
回复
首先你要明白在那单击鼠标左键,视图里可以处理视图的WM_LBUTTONDOWN消息,如果是窗体框架可以处理WM_NCLBUTTONDOWN消息。
具体显示字符的方法:
CDC *pDC = GetDC();
pDC->TextOut(x坐标,y坐标,要显示的字符串);
最后别忘了
ReleaseDC(pDC);
reyo7 2006-04-05
  • 打赏
  • 举报
回复
随便,并不要求单击指定的按钮,哪怕在桌面上单击也行!
加载更多回复(2)
内容概要:本文聚焦于“移动边界法”在微网运行调度优化中的创新应用,深入研究了在集成光热电站和响应分时电价机制背景下的多目标协同优化问题。通过构建精细化数学模型,利用移动边界法动态调整调度周期内的决策边界,有效提升了微网系统对可再生能源的消纳能力与运行经济性。研究充分结合光热电站的储热特性和灵活出力优势,实现对负荷的合理转移与能源的优化配置,增强了系统在复杂电价环境下的适应性与稳定性。配套提供的Matlab代码实现了完整的优化算法流程,涵盖目标函数设计、约束条件处理及求解器接口,具有较强的可复现性与工程参考价值。此外,资源包还整合了电力系统、路径规划、机器学习等多个领域的仿真案例,形成综合性科研支持体系。; 适合人群:面向具备电力系统、自动化或能源系统优化背景,熟悉Matlab编程与基本优化理论,从事新能源调度、微电网规划、综合能源系统等方向的研究生及科研人员。; 使用场景及目标:①掌握移动边界法在动态调度问题中的建模思想与实现技巧;②学习光热电站与分时电价耦合下的微网多目标优化策略;③复现并改进论文算法,支撑学术研究、课题开发或科技竞赛项目;④借助配套资源拓展智能优化、机器学习等交叉领域研究视野。; 阅读建议:建议通过公众号“荔枝科研社”获取完整网盘资源,优先运行核心代码模块,结合文档理解移动边界策略的实现逻辑,重点关注变量边界动态调整机制与优化求解效率之间的平衡,并可借鉴其他案例进行方法迁移与创新。

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧