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 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler