我的问题是,我编写的一个函数,用与读保存的设置,此设置读出后,应该在对应的树的结点前面的方框(我定义成checkbox风格的)打勾,或者置空,
本想让他在对话框的初始化函数OnInitDialog()中调用这个函数,以便在打开对话框后,看到上次的设置信息,明明本函数已经调用成功,为什么不出现响应的小勾呢,后来我添加了按钮,响应这个函数,结果是成功的,这证明该函数是正确的,
为什么在OnInitDialog()中响应,不行呢
本想让他在对话框的初始化函数OnInitDialog()中调用这个函数,以便在打开对话框后,看到上次的设置信息,明明本函数已经调用成功,为什么不出现响应的小勾呢,后来我添加了按钮,响应这个函数,结果是成功的,这证明该函数是正确的,
为什么在OnInitDialog()中响应,不行呢
{
CDialog::OnInitDialog(); FixTipsStruct();//得到下面m_pStruTipsTree结构
InitTipsTree(m_pStruTipsTree, m_sFClsNum);//用结构初始化树,m_sFClsNum为根节点数 return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CMyDlg::InitTipsTree(StruTipsTree *pStruTipsTree, long nRootNum)
{
if (pStruTipsTree == NULL || nRootNum == 0)
return; HTREEITEM hItem;
for (int i=0; i<nRootNum; i++)
{
hItem = m_cTipsTree.InsertItem(pStruTipsTree[i].strBootName, TVI_ROOT);//我开始在这里SetCheck不行,就放到下面去了
for (int j=0; j<pStruTipsTree[i].nAttFieldNum; j++)
{
m_cTipsTree.InsertItem(pStruTipsTree[i].pTipDispField[j].strFieldName, hItem);
}
}
CString strTemp = _T("");
HTREEITEM hItem1, hItem2; for (i=0; i<nRootNum; i++)
{
strTemp = pStruTipsTree[i].strBootName;
hItem1 = FindItem(m_cTipsTree.GetRootItem(), strTemp);//遍历数
if (pStruTipsTree[i].bDispBoot)
{
m_cTipsTree.SetCheck(hItem1, TRUE);
}
for (int j=0; j<pStruTipsTree[i].nAttFieldNum; j++)
{
strTemp = pStruTipsTree[i].pTipDispField[j].strFieldName;
hItem2 = FindItem(hItem1, strTemp);
if (pStruTipsTree[i].pTipDispField[j].bDisp)
{
m_cTipsTree.SetCheck(hItem2, TRUE);
}
}
}
}都成功了,但就是树出来的时候不能显示check。 。
即在
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
PostMessage(....);//发送一条消息--引发你的处理函数
}
我现在是在初始化设一下定时器去改变的状态.这样可以实现需求,但还是不爽.
我看看是不是有什么地方可以再弄一下.
====================================================================这个我一开始就试过了,不行,谢谢你啊,我再想想别的办法,我现在的处理方法就是外加一个按纽,这样每次别人都得点一下,这样很不爽
在制造ROOT前加上:
m_nDiskTree.ModifyStyle( TVS_CHECKBOXES, 0 );
m_nDiskTree.ModifyStyle( 0, TVS_CHECKBOXES );
HTREEITEM hRoot=m_nDiskTree.InsertItem ("我的电脑",2,2,0,0);
就行了!
m_nDiskTree.ModifyStyle( TVS_CHECKBOXES, 0 );
m_nDiskTree.ModifyStyle( 0, TVS_CHECKBOXES );
======================
好了,谢谢大家了这是为什么呢?