CBCGPTabWnd控件AddTab4个Cwnd控件,在OnCreate其中一个控件时,GetWindowRect(&m_wndRect)中,m_wndRect的上下都30,左右都是4,跟实际窗口大小不一样。而我又是根据m_wndRect在CWnd中添加控件的,所以就会出现显示不出内容。如下:
/*m_treeRect.left = 0;
m_treeRect.top = textSize.cy + 4;
m_treeRect.right = m_headerRect.Width() - 5;
m_treeRect.bottom = m_wndRect.Height() - GetSystemMetrics(SM_CYHSCROLL) - 4;
*/
m_treeRect.left = 8;
m_treeRect.top = 16;
m_treeRect.right = 800;
m_treeRect.bottom = 250;
非要我设定值

解决方案 »

  1.   

    调试一下m_treeRect的值是多少啊。坐标分为:屏幕坐标和客户区坐标,也许需要转换一下。/*m_treeRect.left = 0; 
    m_treeRect.top = textSize.cy + 4; 
    m_treeRect.right = m_headerRect.Width() - 5; 
    m_treeRect.bottom = m_wndRect.Height() - GetSystemMetrics(SM_CYHSCROLL) - 4; 
    */ 
      

  2.   


    也许ScreenToClient()转换成Client坐标
      

  3.   

    GetWindowRect(&m_wndRect)改成GetClientRect(&m_wndRect);
    另外GetClientRect放OnCreate中CWnd::Create(...);之后
      

  4.   


    我是先Create 窗口,然后addTAB 到CBCGPTabWnd控件上的。
    m_wndHardwareInfo.Create (_T("STATIC"), NULL, dwTreeStyle, rectDummy, &m_wndTabs, IDC_OUTPUT_HARD) 
    m_wndTabs.AddTab (&m_wndHardwareInfo, _T(MY_STRING_ID(IDS_STRING34381)), -1);
    m_wndHardwareInfo是个继承Cwnd的窗口控件。里面是组合了CTreeListCtrl控件。CTreeListCtrl控件是个组合了CHeaderCtrl,继承CTreeCTRL的控件。像你说的做了后标题栏可以显示,就是插入的内容不能显示。
    CRect m_wndRect;
    GetClientRect(&m_wndRect); CRect m_headerRect;
    m_headerRect.left = m_headerRect.top = -1;
    m_headerRect.right = m_wndRect.Width();
    m_tree.m_wndHeader.Create(WS_CHILD | WS_VISIBLE | HDS_BUTTONS | HDS_HORZ, m_headerRect, this, -1); CSize textSize;
    // set header's pos, dimensions and image list
    {
    CDC *pDC = m_tree.m_wndHeader.GetDC();
    pDC->SelectObject(&m_tree.m_headerFont);
    textSize = pDC->GetTextExtent("A");
    m_tree.m_wndHeader.ReleaseDC(pDC);  m_tree.m_wndHeader.SetWindowPos(&wndTop, -1, -1, m_headerRect.Width(), textSize.cy+4, SWP_SHOWWINDOW); } CRect m_treeRect; // Set the tree itself
    {
    GetClientRect(&m_wndRect); m_treeRect.left = 0;
    m_treeRect.top = textSize.cy + 4;
    m_treeRect.right = m_headerRect.Width() - 5;
    m_treeRect.bottom = m_wndRect.Height() - GetSystemMetrics(SM_CYHSCROLL) - 4;

    /*m_treeRect.left = 8;
    m_treeRect.top = 16;
    m_treeRect.right = 800;
    m_treeRect.bottom = 250;*/ m_tree.Create(WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS, m_treeRect, this, -1);
    }
    if (!h_ImageList.Create(IDB_HARDWARE, 16, 0, RGB(255, 255, 255)))
    {
    // AfxMessageBox(_T("载入硬件信息图片失败"));
    MY_AFXMSGBOX(IDS_STRING34480);
    return -1;
    } m_tree.SetImageList (&h_ImageList, TVSIL_NORMAL); m_tree.InsertColumn(0, _T(MY_STRING_ID(IDS_STRING34384)), LVCFMT_LEFT, 150);
    m_tree.InsertColumn(1, _T(MY_STRING_ID(IDS_STRING34385)), LVCFMT_LEFT, 100);
    m_tree.InsertColumn(2, _T(MY_STRING_ID(IDS_STRING34400)), LVCFMT_LEFT, 100);
    m_tree.InsertColumn(3, _T(MY_STRING_ID(IDS_STRING34401)), LVCFMT_LEFT, 100);
    m_tree.InsertColumn(4, _T(MY_STRING_ID(IDS_STRING34402)), LVCFMT_LEFT, 70);
    m_tree.InsertColumn(5, _T(MY_STRING_ID(IDS_STRING34403)), LVCFMT_LEFT, 80);

    return 0;
    调试m_treeRect = (0, 20, 4, 31)我估计是m_treeRect的缘故。请问怎么解决让m_treeRect 的值等于CWnd窗口的值。
      

  5.   

    就是插入的内容不能显示。是什么意思,没看明白,指m_tree.InsertColumn没出来还是m_tree.InsertItem不显示?
      

  6.   

    m_tree.InsertColumn都能显示,就是m_tree.InsertItem的不能显示。
      

  7.   

    增加WM_SIZE消息响应函数,OnSize中加入
    m_tree.SetWindowPos (NULL, nBorderSize, nBorderSize, 
    cx - 2 * nBorderSize, cy - 2 * nBorderSize,
    SWP_NOACTIVATE | SWP_NOZORDER);
    其中const int nBorderSize = 1;
      

  8.   

    像你这样m_tree.InsertColumn的内容就没了。m_tree.InsertItem的可以显示。
      

  9.   

    估计说少了m_tree.m_wndHeader.setwindowspos()吧。要重新设一下标题栏的位置吧。