У меня есть окно управления изображением (CStatic) в диалоге. Когда пользователь нажимает кнопку в диалоговом окне, мне нужно, чтобы onPaint () рисовал в нем изображение. Проблема в том, что изображение рисуется при загрузке диалога. Как мне это предотвратить и вызвать только при нажатии кнопки.
Мой код onPaint;
void CStaticGraph::OnPaint()
{
POINT xy[1000];
CPaintDC dc(this); // device context for painting
CRect Recto;
char LocDim[80];
GetWindowRect(&Recto);
CPoint pBottom,pTop,pLeft;
CPoint p[50];pBottom.SetPoint(0,0);
pTop.SetPoint(0,Recto.Height());
pLeft.SetPoint(Recto.Width(),Recto.Height());
dc.MoveTo(pBottom);
dc.LineTo(pTop);
dc.LineTo(pLeft);
int y[] ={80,120,180,200};
int x=0;
for(int i=0; i<sizeof(y);i++){
p[i].SetPoint(Recto.Height()-x,y[i]);
if(i>0){
dc.MoveTo(p[i-1]);
dc.LineTo(p[i]);}
x+=50;
}
}
Как вы видите, я строю график, мне также нужно передать данные (значения y []) при нажатии кнопки. Я этого еще не сделал.
Благодарю.
Добавьте переменную, такую как BOOL, в ваш класс CStaticGraph, чтобы он действовал как флаг, сообщая OnPaint (), что делать. Инициализируйте переменную в конструкторе и измените ее при нажатии кнопки. Например:
В заголовочном файле для CStaticGraph добавьте:
BOOL m_fButtonPressed;
В конструктор CStaticGraph добавьте:
m_fButtonPressed = FALSE;
В вашем обработчике нажатия кнопок сделайте что-то вроде:
void CStaticGraph::OnButtonClick()
{
m_fButtonPressed = TRUE;
Invalidate();
}
Тогда в вашем OnPaint только нарисуйте график, когда установлен флаг:
void CStaticGraph::OnPaint()
(
CPaintDC dc(this);
if ( m_fButtonPressed )
{
// Clear the window
return;
}
// Draw the graph
. . .
}
В добавок к Invalidate()
в другом ответе нужно также поменять
for(int i=0; i<sizeof(y);i++)
в
for(int i=0; i<sizeof(y)/sizeof(int);i++)