社区
界面
帖子详情
重分求SDI画图问题--关于数据显示
weasea
2008-07-21 05:18:31
在view里面,我在OnInitialUpdate 启动读数线程。用来读串口来的数据。并显示在EDIT里
当整个程序起来后,串口来的数据依然正常(调试看出),但EDIT已经不刷新了。
百分求解决之道。。。
...全文
52
12
打赏
收藏
重分求SDI画图问题--关于数据显示
在view里面,我在OnInitialUpdate 启动读数线程。用来读串口来的数据。并显示在EDIT里 当整个程序起来后,串口来的数据依然正常(调试看出),但EDIT已经不刷新了。 百分求解决之道。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
NIKE霸天虎
2008-07-21
打赏
举报
回复
简单问题复杂化,你用FromView不就行了,直接拉个Edit控件出来不就行了,还用你徒手画吗,徒手画你也要数据来了更新,你把画图放你自己函数里他咋知道啥时候重画呢
cnzdgs
2008-07-21
打赏
举报
回复
我的意思是线程中用SetWindowText来设置Edit的内容,这样Edit就会自动刷新,如果要防止刷新时闪烁,可以在WM_PAINT消息中用双缓冲的方式来处理。
weasea
2008-07-21
打赏
举报
回复
to cnzdgs
您的意思是把
MemDC.SelectObject (&font);
MemDC.SetTextColor (RGB(0,0,255));
MemDC.TextOut (0 ,0,str,str.GetLength());
pDCLeft->BitBlt(rect.left ,rect.top,rect.right -rect.left ,rect.bottom -rect.top,&MemDC,0,0,SRCCOPY);
提到OnDraw里吗???
deryker
2008-07-21
打赏
举报
回复
你没有更新Edit窗口的举措啊
cnzdgs
2008-07-21
打赏
举报
回复
你应该在线程中修改Edit的内容,让主线程自己刷新。
weasea
2008-07-21
打赏
举报
回复
我的意思是。。。
因为在OnInitialUpdate里已经创建CDC去画图了
当SDI窗口起来后,软件自己的CDC又把它抹掉了。
通俗的讲应该是这样。
weasea
2008-07-21
打赏
举报
回复
算了
还有很多画图的地方的
一画图,我就要去Ondraw里折腾
还是改称对话框程序吧!
deryker
2008-07-21
打赏
举报
回复
说清楚一点哈,你的发消息更新吧
weasea
2008-07-21
打赏
举报
回复
MemDC.TextOut (0 ,0,str,str.GetLength());
这句有用的。。。也就是说从串口来的值是有变化的。
但Edit窗口已经不刷新了
weasea
2008-07-21
打赏
举报
回复
bool CGroupControlView::ReadDataFromInstrumentLeft()
{
DWORD dwStatus;
CString str;
char buf1[10];
m_BreakLeft=0;
str.Format ("COM%d",pPressDefineLeft->iCom);
bool bRet=Open(str,CSerial::EBaudrate(pPressDefineLeft->iComSpeed),CSerial::EData8,CSerial::EParNone,CSerial::EStop1);
if(bRet==0)
{
m_ConnectInstrumentLeft =1;
}
else
{
m_ConnectInstrumentLeft =0;
m_EdtReadingLeft.SetRectangleText("打开串口失败");
m_EdtReadingLeft.SetBkGleam(TRUE);
return 0;
}
CFont font;
LOGFONT lf;
lf.lfHeight = 24;
lf.lfWidth = 0;
lf.lfEscapement = 0;
lf.lfOrientation = 0;
lf.lfWeight = FW_NORMAL;
lf.lfItalic = FALSE;
lf.lfUnderline = FALSE;
lf.lfStrikeOut = FALSE;
lf.lfCharSet = GB2312_CHARSET;
strcpy(lf.lfFaceName,"宋体\x0");
font.CreateFontIndirect(&lf);
CRect rect;
GetDlgItem(IDC_EDT_READING_LEFT)->GetWindowRect(&rect);
ScreenToClient(&rect);
memset(buf1,0,sizeof(buf1));
while(1){
if(m_BreakLeft)
break;
dwStatus = ::WaitForSingleObject(m_hevtStopLeft, 150);
if (dwStatus == WAIT_OBJECT_0 && m_SerialDLC.m_dwReturnError == ERROR_SUCCESS)
{
m_EdtReadingLeft.SetBkGleam(false);
theApp.m_Connect8142Left=true;
m_NewDataLeft=true;
memcpy(buf1,m_DataInstrument+4,6);
if(m_DataInstrument[2] & 0x02)
m_DataInstrument1 =-atoi(buf1);
else
m_DataInstrument1 =atoi(buf1);
str.Format ("%6d",m_DataInstrument1);
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDCLeft,rect.right -rect.left ,rect.bottom -rect.top );
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,rect.right -rect.left ,rect.bottom -rect.top,RGB(255,255,255));
MemDC.SelectObject (&font);
MemDC.SetTextColor (RGB(0,0,255));
MemDC.TextOut (0 ,0,str,str.GetLength());
pDCLeft->BitBlt(rect.left ,rect.top,rect.right -rect.left ,rect.bottom -rect.top,&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
else
{
m_EdtReadingLeft.SetRectangleText("未连接仪表");
m_EdtReadingLeft.SetBkGleam(TRUE);
theApp.m_Connect8142Left=false;
}
}
m_EdtReadingLeft.SetBkGleam(false);
return false;
}
zhoujianhei
2008-07-21
打赏
举报
回复
edit是有长度限制的,如果超过最大字符数,edit就不会更新了。
1. 增加edit字符数上限。
2. 动态删除最早的数据。
cnzdgs
2008-07-21
打赏
举报
回复
没看明白。不刷新是什么意思?如果不创建线程正常吗?线程是如何把数据添加到Edit里面的?
MFC单文档
SDI
首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在的全局变量,它属于CstockAppApp类,而CstockAppApp 继承于CwinApp类,我们看一下MSDN中CwinApp的继承关系如下: 图(二) 从继承关系当中,我们发现theApp是作为程序的实体而存在的,是单文档程序的核心。 首先分析一下的是CsockAppApp这个类,这里面有一个
VS中MFC三大类应用程序开发起步(Dialog、
SDI
、MDI)
在VS中开发VC++应用程序 ,最常用就是MFC应用,它下在又分为常规应用程序、ActiveX控件和DLL程序,那么常规的应用程序根据应用模式又分为Dialog对话框程序、
SDI
单文档、MDI多文档以及多顶级文档几类,下面我们分别介绍一下这几类应用程序的区别。首先在VS的“文件”菜单中选择“新建”-》“项目”,选择VC++-》MFC,其主要界面如下: 在选择应用类型的同时需要输入工程项目的...
关于窗口重画的初级
问题
关于窗口重画的初级
问题
初初级
问题
: 我在视图画的图象或者文字,当窗口改变后(包括最小化后还原,被别的窗口挡住后重新
显示
等)为什么不见了? 这 就是窗口重绘或者说重画的
问题
。当窗口改变后,会产生无效区域,这个无效的区域需要重画。什么是无效区域?自己到网上搜索或者看相关资料。我这里给出一个 特殊的解释:以最小化后还原为例,假设只有一个程序在运行,窗口最小化时
显示
计算机桌面,并不妨假设桌面...
MFC 多视图同步
画图
解决方案
今天看《深入浅出MFC》时,看到要做多视图同步
画图
问题
,此书上刚介绍完单视图
画图
后,引出多视图
画图
的
问题
(多视图是指一个子视图窗口中多个视图区域,由SpliiterWnd分割生成的)。存在相互通知,并特别强调绘图效率的
问题
。我迫不及待的用自己的想法实现了这个高效率绘图
问题
。后来看了一下书上的方法,确实也不错,但感觉比我的绘图效率低。我的绘图方法其实是因为书上开始讲的单视图绘图的方法,给了我一个用此
C/C++分别实现
画图
软件
1.C语言版#include <graphics.h> #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <dos.h> #include <bios.h> #include <math.h> #include <al
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章