怎样批量初始化MFC按钮控件?高手帮帮忙解决方案

怎样批量初始化MFC按钮控件?高手帮帮忙
编译没错,但是运行时提示内存不能为written,
调试时发现((AButton*)GetDlgItem(IDC_BUTTON_1+j))->m_Style=1;指向了同一内存,
有什么办法解决吗?由于按钮太多,一个一个改变状态太麻烦(单个判断处理运行正常)

代码



int j=0;
while(j++<12)
{
if(...)
((AButton*)GetDlgItem(IDC_BUTTON_1+j))->m_Style=1;
else ((AButton*)GetDlgItem(IDC_BUTTON_1+j))->m_Style=2;
}

下面是按钮样式文件
void AButton::OnPaint() 
{


CPaintDC dc(this); // device context for painting

CWnd* pWnd=this;
CString Text;
CRect RC;
CFont Font;
CFont *pOldFont;
CBrush Brush;
CBrush *pOldBrush;
CPoint PT(200,100);

dc.SetBkMode(TRANSPARENT);//设置背景模式为透明
Font.CreateFont(12,0,0,0,FW_HEAVY,0,0,0,ANSI_CHARSET,\
OUT_TT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,\
VARIABLE_PITCH | FF_SWISS,"MS Sans Serif");
pOldFont=dc.SelectObject(&Font);



if(m_Style==1)
{
CBitmap bmp;  
bmp.LoadBitmap(IDBA_BITMAPBUT1);
Brush.CreatePatternBrush(&bmp);

}
else if(m_Style==2)
{
CBitmap bmp;  
bmp.LoadBitmap(IDBA_BITMAPBUT2);
Brush.CreatePatternBrush(&bmp);

}
else if(m_Style==3)
{
CBitmap bmp;  
bmp.LoadBitmap(IDBA_BITMAPBUT3);
Brush.CreatePatternBrush(&bmp);

}
else if(m_Style==4)
{
CBitmap bmp;  
bmp.LoadBitmap(IDBA_BITMAPBUT4);
Brush.CreatePatternBrush(&bmp);

}
else if(m_Style==5)
{
CBitmap bmp;  
bmp.LoadBitmap(IDBA_BITMAPBUT5);
Brush.CreatePatternBrush(&bmp);

}
else if(m_Style==6)
{
CBitmap bmp;  
bmp.LoadBitmap(IDBA_BITMAPBUT6);
Brush.CreatePatternBrush(&bmp);

}




else{
Brush.CreateSolidBrush(RGB(200,100,200));
dc.SetTextColor(RGB(220,220,220));}


  pOldBrush=dc.SelectObject(&Brush);
  pWnd->GetClientRect(&RC);
RECT rcn;
rcn.top=RC.top+5;
rcn.bottom=RC.bottom;
rcn.left=RC.left+5;
rcn.right=RC.right;
  dc.RoundRect(&rcn,PT);

  HRGN hRgn=CreateRectRgn(RC.left,RC.top,RC.right,RC.bottom);
pWnd->SetWindowRgn(hRgn,TRUE);
DeleteObject(hRgn);

pWnd->GetWindowText(Text);
dc.DrawText(Text,&RC,DT_CENTER | DT_VCENTER | DT_SINGLELINE);

Font.DeleteObject();
Brush.DeleteObject();
   
dc.SelectObject(pOldFont);
dc.SelectObject(pOldBrush);
// Do not call CButton::OnPaint() for painting messages
}

第一次发帖,希望能够得到帮助,小弟感激不尽

------解决方案--------------------
AButton是你派生于CButton的类,重载PreSubclassWindow,在里面修改即可
------解决方案--------------------
你可以定义控件数据:CBUTTON* AButton[20];这么做应该没问题,但一定要是CButton的控件,如果是CRadio就不行了
------解决方案--------------------
你确定你的每次+j都是正确的地址吗?这个是关键,建议你保存一个idd的链表,链表循环不要紧
------解决方案--------------------
探讨
引用:
你确定你的每次+j都是正确的地址吗?这个是关键,建议你保存一个idd的链表,链表循环不要紧
运行到第二个就不行了,

------解决方案--------------------
探讨

int j=0;
//while(j++<3)
((AButton*)GetDlgItem(IDC_BUTTON_1+j))->m_Style=1;//正常执行
j++;

// 在此出错,你能确保你的IDC_BUTTON_1+j 此时的值 就是IDC_BUTTON_2吗?

((AButton*)GetDlgItem(IDC_BUTTON_1+j))->m_Style=1;//在此出错,IDC_BUTTON_2存在
j++;

((AButton*)GetDlgItem(IDC_BU……