我在对话框中有一个图片控制框(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 :(得分:1)
将一个变量(如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 :(得分:1)
除了其他答案中的Invalidate()
之外,您还需要更改
for(int i=0; i<sizeof(y);i++)
到
for(int i=0; i<sizeof(y)/sizeof(int);i++)