2 iyxiajun iyxiajun 于 2014.01.16 16:25 提问

一个在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() 函数,但没有任何反应,不知道怎么回事,还请各位大大指正!!!!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!