CFormView中添加MsFlexGrid控件,并关联控件变量m_flexgridup.
void CBDlg::OnBDlgOk()
{
CDialog::OnOK();
CAView spk;
spk.SetFlexGridUp();
}
void CAView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
AfxEnableControlContainer();
}
void CAView::SetFlexGridUp()
{
CRect rect;
m_flexgridup.GetWindowRect(&rect);
m_flexgridup.Create(NULL,WS_CHILD|WS_VISIBLE,rect,this,IDC_MSFLEXGRID2);
m_flexgridup.SetCols(x+1);//x为全局变量
m_flexgridup.SetRows(x+100);
m_flexgridup.SetTextMatrix(0,0,"次\\元");
for (int k=1;k<x+1;k++)
{
m_flexgridup.SetColWidth(k,(rect.Width()/(x+1);
m_flexgridup.SetTextMatrix(0,k,"a");
}
}
错误在哪里?调试通过,运行有问题。
void CBDlg::OnBDlgOk()
{
CDialog::OnOK();
CAView spk;
spk.SetFlexGridUp();
}
void CAView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
AfxEnableControlContainer();
}
void CAView::SetFlexGridUp()
{
CRect rect;
m_flexgridup.GetWindowRect(&rect);
m_flexgridup.Create(NULL,WS_CHILD|WS_VISIBLE,rect,this,IDC_MSFLEXGRID2);
m_flexgridup.SetCols(x+1);//x为全局变量
m_flexgridup.SetRows(x+100);
m_flexgridup.SetTextMatrix(0,0,"次\\元");
for (int k=1;k<x+1;k++)
{
m_flexgridup.SetColWidth(k,(rect.Width()/(x+1);
m_flexgridup.SetTextMatrix(0,k,"a");
}
}
错误在哪里?调试通过,运行有问题。
这句去掉吧,它是在动态生成时用的,CFormView不需要。
m_flexgridup.Create(NULL,WS_CHILD|WS_VISIBLE,rect,this,IDC_MSFLEXGRID2); CDialog::OnOK(); 动态生成时用的
但是这里是否有问题呢?
CAView spk;
spk.SetFlexGridUp();
{
CDialog::OnOK();
CAView spk;
spk.SetFlexGridUp();
}
工程是基于文本的吧?CBDlg类是一个对话框的类吧?如果都是的话,按我的理解是有问题的
最好在CBDlg类的声明公有变量:CAView *spk;
在CAView 类中定义CBDlg对象时把传递指针给它
CBDlg dlg;
dlg.spk=this;在CBDlg中就可以这样用:
spk->SetFlexGridUp();
spk=NULL;
void CBDlg::OnBDlgOk()
{
spk->SetFlexGridUp();
CDialog::OnOK();
}
先谢。
兄弟,如果看不懂,再多看看书。