我已经声明了 CToolBar m_toolbar;
然后在INitDlg 时,m_toolbar.create(this);
m_toolbar.load(****);
按道理,它已经能够显示了,之后在处理它的状态问题,可是我的DLG为什么不显示?
问题出在那了呢??

解决方案 »

  1.   

    m_toolbar.ShowWindow(SW_SHOW);
    调用一下
      

  2.   

    http://www.vckbase.com/document/viewdoc.asp?id=265
      

  3.   

    这样加入的工具栏如何响应ON_COMMAND_UPDATE_UI?
      

  4.   

    [转贴]
    二、如何往基于Dialog的程序添加工具栏[2.1] 先添加工具栏(IDR_TOOLBAR1)资源,并画好各个按钮。
    [2.2] 在CDlgMenuToolbarDlg类声名中添加成员变量 CToolBar m_wndtoolbar;
    [2.3] 在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代码 
     //添加一个平面工具条
    if (!m_wndtoolbar.CreateEx( this,TBSTYLE_FLAT ,  WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,
        CRect(4,4,0,0)) || !m_wndtoolbar.LoadToolBar(IDR_TOOLBAR1) )
    {
    TRACE0("failed to create toolbar\n");
    return FALSE;
    }
    m_wndtoolbar.ShowWindow(SW_SHOW);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
    三、为工具栏添加工具提示[3.1] 在CDlgMenuToolbarDlg类定义中手工添加消息映射函数的定义,如下黑体部分 
       //{{AFX_MSG(CDlgMenuToolbarDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()[3.2] 在CDlgMenuToolbarDlg.cpp添加函数的实现代码 
    //工具栏提示
    BOOL CDlgMenuToolbarDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
    {
    ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

    // UNICODE消息
    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    //TCHAR szFullText[512];
    CString strTipText;
    UINT nID = pNMHDR->idFrom;

    if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
    pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    {
    // idFrom为工具条的HWND 
    nID = ::GetDlgCtrlID((HWND)nID);
    }

    if (nID != 0) //不为分隔符
    {
    strTipText.LoadString(nID);
    strTipText = strTipText.Mid(strTipText.Find('\n',0)+1);

    #ifndef _UNICODE
    if (pNMHDR->code == TTN_NEEDTEXTA)
    {
    lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
    }
    else
    {
    _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    }
    #else
    if (pNMHDR->code == TTN_NEEDTEXTA)
    {
    _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
    }
    else
    {
    lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    }
    #endif

    *pResult = 0;

    // 使工具条提示窗口在最上面
    ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|
    SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); 
    return TRUE;
    }
    return TRUE;
    }[3.3] 在CDlgMenuToolbarDlg.cpp中添加消息映射,请看如下代码中的黑体部分 
    BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg, CDialog)
    //{{AFX_MSG_MAP(CDlgMenuToolbarDlg)
    ON_WM_PAINT()
    ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()