有关属性页改名的问题!!

leepyzh 2001-08-17 04:15:35
我用CPropertySheet创建属性页,用的CPropertyPage对象只有一个,也就是每个属性页的内容一样.
想在的问题是:这样每个属性页的标题都是一样的,是对话框的标题!怎样动态的改变这个标题,使每个属性页的标签的名称都不同??
...全文
171 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
leepyzh 2001-08-24
  • 打赏
  • 举报
回复
我用CPropertyPage的m_psp成员已能更改标题了.实现为:
CPropertyPage m_page[32];
m_page[0].m_psp.dwFlags¦=PSP_USETITLE;
m_page[0].m_psp.pszTitle="标题";

其实,这样问题已能解决,我的错误是:
忽视了m_psp.pszTitle参数是一个指针,我用CString的变量给它赋值,实际上只是赋一个地址给它,结果,最后每个标题都是一样的,结尾最后一个值。

错误代码:

CPropertyPage m_page[32];
CString m_buffer;
for(int i=0;i<32;i++)
{
m_buffer=CString("Setting")+m_buffer.Format("%d",i);
m_page[i].m_psp.dwFlags¦=PSP_USETITLE;
m_page[i].m_psp.pszTitle=m_buffer;
}

正确的代码为:

CPropertyPage m_page[32];
CString m_buffer[32];
for(int i=0;i<32;i++)
{
m_buffer[i]=CString("Setting")+m_buffer[i].Format("%d",i);
m_page[i].m_psp.dwFlags¦=PSP_USETITLE;
m_page[i].m_psp.pszTitle=m_buffer[i];
}

谢谢大家的指导!!!
蒋晟 2001-08-18
  • 打赏
  • 举报
回复
In some function of your page
CPropertyShee* pSheet=Parent();
CTabCtrl * pCtrl = pSheet->GetTabControl();
TCITEM tci;
tci.mask = TCIF_TEXT;
tci.pszText = "新标题";
pCtrl->SetItem(0,&tc); //change the title of page 1

码农猿圈圈 2001-08-17
  • 打赏
  • 举报
回复
因为 CWnd 及其派生类的对象不同于 windows 的 "window", windows 的 "window"使用一个句柄标示, 对于 MFC ,它储存在相对应的 CWnd 及其派生类的 m_hWnd 属性中.
在windows 的 "window"没有被创建(CWnd::Create或CDialog::DoModal)以前 m_hWnd 所包含的句柄是无效的, 因此断言宏 ::ASSERT(IsWindow(m_hWnd)) 失败!
码农猿圈圈 2001-08-17
  • 打赏
  • 举报
回复
又是一个类似的问题:

请你先创建了相应的窗体,比如:
m_sheet.DoModal();
m_sheet.Create(mm_sheet::IDD);
后,再改变窗体的标题属性!
CTabCtrl * pCtrl = m_sheet->GetTabControl();
TCITEM tc;
tc.mask = TCIF_TEXT;
tc.pszText = "新标题";
pCtrl->SetItem(0,&tc);
leepyzh 2001-08-17
  • 打赏
  • 举报
回复
我用CPropertyPage的m_psp成员已能更改标题了.实现为:
CPropertyPage m_page[32];
m_page[0].m_psp.dwFlags|=PSP_USETITLE;
m_page[0].m_psp.pszTitle="leepusdlsdf";

但是,这样一改,我所有的32个页面的标题全部都是一样,可能是公用一个Dialog的先天不足吧.真有点不甘心.大侠们看是不是.
leepyzh 2001-08-17
  • 打赏
  • 举报
回复
To jiangsheng(蒋晟):
我说的是修改标签(CPropertyPage对象)的标题,你的意思好像是修改CPropertySheet的标题.
To isdong(西西):
我的编译能通过,只是执行时的有问题.我用指针试过也不行.
panda_w 2001-08-17
  • 打赏
  • 举报
回复
这样不行么?
CString sCaption = _T("New Caption");
TC_ITEM tcItem;
tcItem.mask = TCIF_TEXT;
tcItem.pszText = (LPTSTR)((LPCTSTR)sCaption);
GetTabControl()->SetItem(0, &tcItem );


蒋晟 2001-08-17
  • 打赏
  • 举报
回复
>怎样动态的改变这个标题,使每个属性页的标签的名称都不同??
什么时候改?CPropertySheet创建之前/属性页激活之后?
如果是前者的话,修改CPropertySheet::m_psh
如果是后者的话,重载CPropertyPage::OnSetActive,
用GetParent()返回PropertySheet指针,然后SetWindowText
isdong 2001-08-17
  • 打赏
  • 举报
回复
CTabCtrl * pCtrl = m_sheet.GetTabControl();//你声明的实例怎么可以用指针操作符?????
leepyzh 2001-08-17
  • 打赏
  • 举报
回复
To: isdong(西西)
这个当然知道.
不知出错原因是什么?用SetWindowText也是一样出错.
程序如下::
.....
CPropertySheet m_sheet("Setting");
CPropertyPage m_page[2];
m_sheet,AddPage(&m_page[0]);
m_sheet,AddPage(&m_page[1]);
//////加入你的代码/////////
CTabCtrl * pCtrl = m_sheet->GetTabControl();
TCITEM tc;
tc.mask = TCIF_TEXT;
tc.pszText = "新标题";
pCtrl->SetItem(0,&tc);//0即是你要改的TAb的索引
/////////////////////////////
m_sheet.DoModal();
.....

isdong 2001-08-17
  • 打赏
  • 举报
回复
pSheet是一个CPropertySheet的指针,需要你自己传过来,不用我什么都说吧!
leepyzh 2001-08-17
  • 打赏
  • 举报
回复
两种方法错误一样.跟踪后得到错误的地方为:ASSERT(IsWindow(m_hWnd)),好像意思是说psheet指向的是窗口(??).
很急,大侠们帮帮忙!!
isdong 2001-08-17
  • 打赏
  • 举报
回复
CTabCtrl * pCtrl = pSheet->GetTabControl();
TCITEM tc;
tc.mask = TCIF_TEXT;
tc.pszText = "新标题";
pCtrl->SetItem(0,&tc);//0即是你要改的TAb的索引
xbjob 2001-08-17
  • 打赏
  • 举报
回复
look
xzou 2001-08-17
  • 打赏
  • 举报
回复
对每个属性页调用SetWindowText(".....")

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧