void CMyDialog::OnEndLabelEdit (NMHDR* pNMHDR, LRESULT* pResult)
{
    LV_DISPINFO* pLvdi = (LV_DISPINFO*)pNMHDR;// The text is maintained by the application, so first update it// Set up the item, to reset its text
    LV_ITEM lvi;
    lvi.mask = LVIF_TEXT;
    lvi.iItem=pLvdi->item.iItem;
    lvi.iSubItem = 0;
    lvi.pszText = LPSTR_TEXTCALLBACK;// Call CListCtrl::SetItem, to force recalculation of the text length
    m_ListCtl.SetItem ( &lvi );    *pResult = 0;

解决方案 »

  1.   

    void CMainFrame::RecalcLayout(BOOL bNotify) 
    {

    CYourFrame::RecalcLayout(bNotify);
    CYourFrame::RecalcLayout(bNotify);
    }
    加多一次 CYourFrame::RecalcLayout(bNotify) 试试
      

  2.   

    我试了没问题,你是怎么做的?
    在OnSelchangeTab1里不要用pNMHDR->idFrom,用GetCurSel你再试试BOOL CTestDlg::OnInitDialog()
    {
    ........
    // TODO: Add extra initialization here
    m_tab.InsertItem(0,"Tab1");
    m_tab.InsertItem(1,"Tab2");
             m_tab.SetCurSel(0);
    m_list1.ShowWindow(SW_SHOW);
    m_list2.ShowWindow(SW_HIDE); return TRUE;  // return TRUE  unless you set the focus to a control
    }
    void CTestDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    if(pNMHDR->hwndFrom ==m_tab.GetSafeHwnd() && pNMHDR->code==TCN_SELCHANGE){ int i=m_tab.GetCurSel();
    if( i == 0){
    m_list1.ShowWindow(SW_SHOW);
    m_list2.ShowWindow(SW_HIDE);

    }
    if( i == 1){
    m_list2.ShowWindow(SW_SHOW);
    m_list1.ShowWindow(SW_HIDE);
    } }
    *pResult = 0;
    }
      

  3.   

    OnSelchange没有问题,是主窗口被激活时Tab中的控件不正常显示,但单击时显示选中的行.
      

  4.   

    如果当前显示的List没有被单击过则正常显示,如果被单击过则不正常.
      

  5.   

    void CAnyTableDlg::OnSelChangeTabReport(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    pNMHDR; ChangeTabReport(m_Tab_Report.GetCurSel());

    *pResult = 0;
    }BOOL CAnyTableDlg::ChangeTabReport(int nSel)
    {
    int i; ASSERT(nSel<TAB_NUM);
    for(i=0;i<TAB_NUM;i++)
    {
    if(NULL!=m_preportarray[i] && IsWindow(m_preportarray[i]->m_hWnd))
    m_preportarray[i]->ShowWindow(SW_HIDE);
    }
    if(NULL!=m_preportarray[nSel] || IsWindow(m_preportarray[nSel]->m_hWnd))
    m_preportarray[nSel]->ShowWindow(SW_SHOW); return TRUE;
    }
      

  6.   

    什么意思呀?我没大看懂m_preportarray[nSel]->ShowWindow(SW_SHOW);//后面加句
    m_preportarray[nSel]->Invalidate(TRUE);
      

  7.   

    哦,既然是鼠标单击时显示不正常
    你在鼠标单击的时候重画一下ListCtrl不就得了
      

  8.   

     回复人:zb_china(zb) (2001-5-9 16:14:00)  得0分 
    当窗口切换---从另一个程序窗口切换到这个程序的窗口或本程序的模式对话框关闭,本窗口成为活动窗口时,列表框"有时"不显示.  
      

  9.   

    呵呵,
    把这两行代码加上去,加到处理CLISTCTRL的变化的代码里,

    InvalidateRect(hList,NULL,true);
    UpdateWindow(hList);
    。不止是CListCtrl,还有CTreeCtrl在和CTab结合的时候,
    也出这个问题,到时候注意就是了。
    估计是WINDOWS系统本身在“刷新”这些“通用控件”是有BUG。
    所以,只能使用强制“刷新”的办法。你可以试试
      

  10.   

    嘿嘿,Tree和Tab结合我也用过,也有这种情况,看来是只有这样了.
      

  11.   

    这主要是系统重新绘制造成的
    建立此类窗口时,大多会将tab和tree都作为对话框或框架窗口的子窗口
    这就会有这样的问题,由于他们的地位是平等的,系统在绘制时,不知道他们的前后关系。
    会产生绘制上的瑕疵 解决方法是,将tree等作为tab的子窗口,(子窗口会画在父窗口的上面)
    m_tab.Create(WS_CHILD|WS_,CRect(0,0,0,0),this,IDW_TAB);
    -----------------------------------------^^^^---------
    m_list.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,0,0),&m_tab,IDW_LIST); //以list为例
    -------------------------------------------------^^^^^^-----------
      

  12.   

    多说几句,对与窗口发生重叠时,需考虑窗口之间的关系
    并设置好几个相关的风格位
    WS_CLIPCHILDREN   
    WS_CLIPSIBLINGS
    VC编程时,很多问题需要自己想清楚来龙去脉,否则,用VB算了
      

  13.   

    调用一下
    BOOL RedrawWindow(
      HWND hWnd,               // handle to window
      CONST RECT *lprcUpdate,  // update rectangle
      HRGN hrgnUpdate,         // handle to update region
      UINT flags               // array of redraw flags
    );
      

  14.   

    FMD(Niko) :我确信你指出了问题所在.但是我的Tab中的内容一部分是预先放在对话框上然后移动到Tab里的,另外一部分是动态生成的,这怎么办?
      

  15.   

    是你动态生成部分的属性设置有问题。
    如果你是使用占位符方式动态创建的话,只需将占位符的控件(如CStatic)的"Visible"属性选项取消就可以了。
      

  16.   

    对于对话框原有的成员
    m_list1.SetParent(&m_tab);
    这样,可解决list窗口激活时,不绘制的问题
    对通知消息的相应也没有影响。
      

  17.   

    已解决:
    使用了SetParent方法
    pthislc是CListCtrl指针,预先创建或动态创建的.
    m_Tab_Report.GetClientRect(&rect);
    //m_Tab_Report.GetWindowRect(&rect);
    m_Tab_Report.SendMessage(TCM_ADJUSTRECT,(WPARAM)FALSE,(LPARAM)&rect);
    //ScreenToClient(&rect);
    pthislc->MoveWindow(&rect);