gpt4 book ai didi

c++ - 我不知道为什么重复调用 OnDraw() 函数

转载 作者:行者123 更新时间:2023-11-28 02:16:22 25 4
gpt4 key购买 nike

代码如下:

void PinNameView::OnDraw(CDC* pDC)
{
if(!AdPinData::getFlag()) return;

for(int i=0; i<numOnPins; i++)
pButton[i].ShowWindow(SW_SHOW);
SetScrollSizes(MM_TEXT, CSize(timeFrame*gridX,0));
}

这里是 OnUpdate() 函数,它在从文本文件中获取引脚名称时将引脚名称设置到按钮框中。

void PinNameView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
if(!AdPinData::getFlag()) return;

numOnPins = AdPinData::getOnPinSize();
pt_Pin = AdPinData::getPinDataPtr();
if(pButton) delete [] pButton; //initialize pButton if the pointer has a last value
pButton = new CButton[numOnPins]();
for(int i=0; i<numOnPins; i++){ //to write pinName into each buttons
string str = pt_Pin[i].pinName;
pButton[i].Create((CString)str.c_str(),WS_CHILD | WS_VISIBLE | BS_BITMAP/*BS_DEFPUSHBUTTON*/,
CRect(0,i*gridY,98,(i+1)*gridY),this,i);
}
this->Invalidate(false);
}

而在 Debug模式下运行时,我发现OnDraw()函数被重复调用。 SetScrollSizes()函数之后,再次进入OnDraw()函数的开始,重复40-50次左右。

我不太明白这是怎么回事。

最佳答案

不要直接从 OnDraw() 调用 SetScrollSizes。这是真正的坏习惯。当内容以需要更改滚动位置的方式更改时调用 SetScrollSizes,然后在 OnDraw 中使用滚动信息。

否则,由于 OnDraw 决定滚动尺寸发生变化,从而改变显示的信息量,您将陷入无限循环,这需要调用 OnDraw ,然后,作为更改的结果,它会更改滚动大小,这意味着必须重新显示信息。

关于c++ - 我不知道为什么重复调用 OnDraw() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33894592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com