MFC动态创建控件
我做了一个对话框程序,而这个主对话框通过DLL的形式再调用了2个不同的对话框。2个对话框分别动态在自己的对话框里绘制了按钮以及静态文本。而只要我先打开A对话框,按钮和文本绘制是没问题的。再没有关闭下主程序情况下,再打开B对话框,那么就会出现绘制的问题。就是所有按钮的位置都表示出来了,而我再按钮上加载的图片看不见,静态文本也没有我要的字符值!如果我用鼠标点击B对话框里某一个按钮,那么图片这个时候就加载进来了!如果先打开B对话框,而A出现的情况是一样的。如果我在A或B对话框里的标签不用指针动态创建出来的话,直接用变量的形式,或者从资源里拖20个标签的话,也不会出现这个问题。开始以为是2个对话框里面的静态文本的ID冲突了,但是2个对话框根本就是不同的。而且我也测试过了,就算ID我改成不一样的,也是不行的。下面贴一段我绘制的代码,2个对话框都是一样的!
CPathButton *m_buttons[BTN_TOTAL_NUM]; //按钮
CStatic *m_statics[BTN_TOTAL_NUM]; //标签
//绘制按钮
CString sBtnName;
sBtnName.Format(_T("Button%d"),nFirBtnIndex+i);
m_buttons[nFirBtnIndex+i] = new CPathButton;
m_buttons[nFirBtnIndex+i]->Create(NULL,BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,
CRect(x+430,y-20,x+BTN_WIDTH + 430,y+BTN_HEIGHT-20),this,nFirBtnID+i);
if (m_MovieTemp[nFirBtnIndex+i].bVideoPath)
{
m_buttons[nFirBtnIndex+i]->m_strImagePath = m_strNoMoviePath;
}
else
{
m_buttons[nFirBtnIndex+i]->m_strImagePath = m_MovieTemp[nFirBtnIndex+i].strImgPath;
m_buttons[nFirBtnIndex+i]->m_strImagePath2 = m_strNoImg;
}
//绘制标签
m_statics[nFirBtnIndex+i] = new CStatic;
CString strTemp;
strTemp = m_MovieTemp[nFirBtnIndex+i].strName;
m_statics[nFirBtnIndex+i]->Create(strTemp,WS_VISIBLE|WS_CHILD|SS_CENTER,
CRect(x+430,y+120,x+BTN_WIDTH+430,y+STA_HEIGHT+120),this,nFirStaID+i);
m_Button[nFirBtnIndex+i].Buttonid=nFirBtnID+i;
m_hBrush[nFirBtnIndex+i] = GetBkBrush( GetSafeHwnd(), FIRST_STARIC_ID+i, m_Bkgnd );
m_statics[nFirBtnIndex+i]->SetFont(&m_fontName);