MFC:根据请求将CListView选项卡添加到CTabView(CBCGPTabView)不会';t调用CMyListView::OnInitialUpdate()
我有一个MFC:根据请求将CListView选项卡添加到CTabView(CBCGPTabView)不会';t调用CMyListView::OnInitialUpdate(),mfc,clistview,ctabctrl,Mfc,Clistview,Ctabctrl,我有一个CMyTabView源于CBCGPTabView(CTabView),我想动态添加选项卡。正在添加的选项卡将是从CListView派生的CMyListView。如果我在CMyTabView::OnCreate()期间添加选项卡,它就可以正常工作。如果我尝试通过自定义消息执行此操作,它会添加选项卡,但它是空的(CMyListView::OnInitialUpdate()从未调用) 我需要做什么才能让它工作 以下是有效的方法(测试选项卡): 这不会(除了添加带有空白窗口的选项卡) afx_m
CMyTabView
源于CBCGPTabView
(CTabView
),我想动态添加选项卡。正在添加的选项卡将是从CListView
派生的CMyListView
。如果我在CMyTabView::OnCreate()期间添加选项卡,它就可以正常工作。如果我尝试通过自定义消息执行此操作,它会添加选项卡,但它是空的(CMyListView::OnInitialUpdate()
从未调用)
我需要做什么才能让它工作
以下是有效的方法(测试选项卡):
这不会(除了添加带有空白窗口的选项卡)
afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM WPARAM,LPARAM LPARAM)
{
CString mytabname;
mytabname=_T(“我的列表视图”);
//检查选项卡是否已存在-如果已存在,请选择它
CBCGPTabWnd&tabcontrol=GetTabControl();
对于(inti=0;i,您必须自己调用它,下面的版本有效:
afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM wparam, LPARAM lparam)
{
CString mytabname;
mytabname=_T("My ListView");
// check if tab already exists - if so select it
CBCGPTabWnd &tabcontrol=GetTabControl();
for (int i=0; i<tabcontrol.GetTabsNum(); i++) {
CString tablabel;
if (tabcontrol.GetTabLabel(i, tablabel)) {
if (tablabel==mytabname) {
tabcontrol.SetActiveTab(i);
return 0;
}
}
}
// new tab so add it
int index=AddView(RUNTIME_CLASS(CMyListView), mytabname);
if (index!=-1) {
CView* thetabview=GetView(index);
if (thetabview) {
// we need to call OnInitUpdate ourself
thetabview->SendMessage(WM_INITIALUPDATE);
//make sure any child windows of the view get the message too
thetabview->SendMessageToDescendants(WM_INITIALUPDATE, 0, 0, TRUE, TRUE);
}
tabcontrol.SetActiveTab(index);
}
return 0;
}
afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM WPARAM,LPARAM LPARAM)
{
CString mytabname;
mytabname=_T(“我的列表视图”);
//检查选项卡是否已存在-如果已存在,请选择它
CBCGPTabWnd&tabcontrol=GetTabControl();
对于(int i=0;iSendMessage(WM_INITIALUPDATE);
//确保该视图的所有子窗口也获得该消息
选项卡视图->发送消息到Descendats(WM_INITIALUPDATE,0,0,TRUE,TRUE);
}
tabcontrol.SetActiveTab(索引);
}
返回0;
}
afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM wparam, LPARAM lparam)
{
CString mytabname;
mytabname=_T("My ListView");
// check if tab already exists - if so select it
CBCGPTabWnd &tabcontrol=GetTabControl();
for (int i=0; i<tabcontrol.GetTabsNum(); i++) {
CString tablabel;
if (tabcontrol.GetTabLabel(i, tablabel)) {
if (tablabel==mytabname) {
tabcontrol.SetActiveTab(i);
return 0;
}
}
}
// new tab so add it
int index=AddView(RUNTIME_CLASS(CMyListView), mytabname);
if (index!=-1) {
tabcontrol.SetActiveTab(index);
}
return 0;
}
afx_msg LRESULT CMyTabView::OnUwmAddMyListViewTab(WPARAM wparam, LPARAM lparam)
{
CString mytabname;
mytabname=_T("My ListView");
// check if tab already exists - if so select it
CBCGPTabWnd &tabcontrol=GetTabControl();
for (int i=0; i<tabcontrol.GetTabsNum(); i++) {
CString tablabel;
if (tabcontrol.GetTabLabel(i, tablabel)) {
if (tablabel==mytabname) {
tabcontrol.SetActiveTab(i);
return 0;
}
}
}
// new tab so add it
int index=AddView(RUNTIME_CLASS(CMyListView), mytabname);
if (index!=-1) {
CView* thetabview=GetView(index);
if (thetabview) {
// we need to call OnInitUpdate ourself
thetabview->SendMessage(WM_INITIALUPDATE);
//make sure any child windows of the view get the message too
thetabview->SendMessageToDescendants(WM_INITIALUPDATE, 0, 0, TRUE, TRUE);
}
tabcontrol.SetActiveTab(index);
}
return 0;
}