iyxiajun 2014-01-16 08:25 采纳率: 0%
浏览 2127

一个在MFC对话框程序的PICTRUE控件中绘图的问题

本人目前正在做一个小程序,用于在数据库中读取某个字段,然后根据读取的结果在Pictrue控件中进行绘图(由一个按钮按下的事件驱动)。
原理为这般:
bool型变量m_bIsDraw (默认为false) 用于判断是否为首次程序,如果是第一次打开则执行在OnPaint()函数中drawCircle(void)函数(用于生成直角坐标系和圆形的底图),然后将m_bIsDraw置为true,按键按下的函数中调用void CfindHistoryDlg::drawHistroy(void)(用于读取字段,并生成图形)代码如下:
void CfindHistoryDlg::drawHistroy(void)
{
_variant_t time,varWD;

double dWD;

CPoint cpTemp;
CRect rect;
CWnd* pWnd = GetDlgItem(IDC_STATIC_PICTURE);
pWnd->GetClientRect(&rect);
CDC* pDC = pWnd->GetDC();

this->m_pRecordset.CreateInstance(_uuidof(Recordset));
try{
m_pRecordset->Open("SELECT * FROM aa",
this->m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockReadOnly,adCmdText); //读取数据库
if(!(m_pRecordset->BOF && m_pRecordset->adoEOF)){ //是否为空表
m_pRecordset->MoveFirst();
while(!m_pRecordset->adoEOF){
time = m_pRecordset->GetCollect("时间");
if( this->varToString(time) != "0"){ //时间字段不为0
if((m_pRecordset->GetCollect("温度")).vt != VT_NULL){
dWD = (double)m_pRecordset->GetCollect("温度");
//以下的两步用于计算数值在坐标中的位置
dWD = this->calcDistance (dWD,220);

cpTemp = this->drawPosition(dZnw);
pDC->SetPixelV(cpTemp,RGB(255,0,0)); //描点
}
}
m_pRecordset->MoveNext();
}

    else{
        AfxMessageBox(L"数据表为空!");
    }
}
catch(_com_error *e){
    AfxMessageBox(e->ErrorMessage());
}
m_pRecordset->Close();
m_pRecordset = NULL;
this->ReleaseDC(pDC);

}
将其放在OnPaint()的 m_bIsDraw == true 分支
在按钮事件中将 m_bIsDraw 置为true 并调用OnPaint() 函数,但没有任何反应,不知道怎么回事,还请各位大大指正!!!!

  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:15
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题