вызвать onPaint () нажатием кнопки

У меня есть окно управления изображением (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 []) при нажатии кнопки. Я этого еще не сделал.

Благодарю.

0

Решение

Добавьте переменную, такую ​​как 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
. . .
}
1

Другие решения

В добавок к Invalidate() в другом ответе нужно также поменять

for(int i=0; i<sizeof(y);i++)

в

for(int i=0; i<sizeof(y)/sizeof(int);i++)
1

По вопросам рекламы [email protected]