我自己做了一个CDialogBar对像,停靠在工具条下面,代码如下:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
     ……
         //我这里先做了一个滑动条,放在工具条的右边显示
CSliderCtrl m_SliderCtrl;
CRect rect;
GetWindowRect(rect);
rect.top = 20;
rect.bottom =  40;
rect.left = rect.right-rect.Width()*0.50;
rect.right = rect.right-rect.Width()/8;
m_SliderCtrl.Create(WS_CHILD | WS_VISIBLE | CBRS_TOP|TBS_HORZ,rect,this,IDC_SLIDER);
m_SliderCtrl.SetRange(0,1000,true);
m_SliderCtrl.SetPageSize(1);//下面就是我自己做的CDialogBar
  CMeasureDlg m_wndMyDialogBar;//CMeasureDlg是CDialogBar的派生类
if (!m_wndMyDialogBar.Create(this, CG_IDD_MYDIALOGBAR,
CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE,
CG_ID_VIEW_MYDIALOGBAR))
{
TRACE0("Failed to create dialog bar m_wndMyDialogBar\n");
return -1; }
//停靠,下面三句话在的时候,程序运行时停靠在正确位置,但是能拖动,而打印预览的显示正确
m_wndMyDialogBar.EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndMyDialogBar);
……
}
我打印预览实际就是调用了MFC默认的函数,但是我把停靠的三句话去掉,打印预览时,界面最上方就会多出我的CDialogBar对象(CMeasureDlg m_wndMyDialogBar),并且滑动条CSliderCtrl m_SliderCtrl也出现了,请高手指点
void CYuhtView::OnMyPrintPreview()
{
CView::OnFilePrintPreview();
}

解决方案 »

  1.   

    没这样用过,找找MSDN或者vckbase
      

  2.   

    应该是CBRS_TOP因为你创建的时候用了这个呀,它默认应该在CBRS_TOP   Control bar is at the top of the frame window. 你可以换其他位置试试了。
      

  3.   

    不是很明白你为什么要把那三句话拿掉。
    当切换到打印预览的界面时,MFC会向所有的子窗口发送WM_SIZEPARENT消息,没有那三句话,你的dialogbar就收不到消息,无法正确将自己隐藏。
      

  4.   

    1、调用打印预览前隐藏
    CMainFrame   *pMain=(CMainFrame   *)AfxGetApp()->m_pMainWnd;   
         if(pMain->m_wndMyDialogBar.IsWindowVisible()) //隐藏CDialogbar

    pMain->m_wndMyDialogBar.ShowWindow(SW_HIDE); 

    2、调用打印结束后重新显示。
    void CYuhtView::OnMyPrintPreview()
    {
    CView::OnFilePrintPreview();
    CMainFrame   *pMain=(CMainFrame   *)AfxGetApp()->m_pMainWnd;   
    if(!pMain->m_wndMyDialogBar.IsWindowVisible()) //调用打印预览后,重新显示CDialogbar

    pMain->m_wndMyDialogBar.ShowWindow(SW_SHOW); 

    }