我自己做了一个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();
}
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();
}
当切换到打印预览的界面时,MFC会向所有的子窗口发送WM_SIZEPARENT消息,没有那三句话,你的dialogbar就收不到消息,无法正确将自己隐藏。
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);
}
}