打印预览工具栏中的定制问题主要包括:
1、中英互译。
2、用图标按钮代替字符按钮。
本文首先说明第一种情况,第二种情况会在以后介绍。
步骤:
1、生成一个继承自CPreviewView类的CMyPreviewView类。
2、重载两个消息处理函数OnActivateView() 和 OnUpdateNumPageChange()。
作者在实际开发过程中,以为只要重载第一个函数就好了,但是那样不能改变NumPage(两页、一页按钮)按钮的外观,因为在OnActiveView之后实际上又调用了CPreviewView类的OnUpdateNumPageChange()函数,而CPreviewView类的OnUpdateNumPageChange()函数会把在OnActivateView中对NumPage修改的外观重置。
3、为了让按钮按照实际情况进行更新(当放大按钮放到最大,放大按钮变灰等)。
对应代码:
1、CMyPreviewView::OnActivateView(BOOL bActivate, CView*, CView*)
{
if(bActivate)
{
if(m_pToolBar)
{
m_pToolBar->SetDlgItemText(AFX_ID_PREVIEW_PRINT, _T("打印(&P)") ;
//设置另外几个按钮
}
}
}
1、中英互译。
2、用图标按钮代替字符按钮。
本文首先说明第一种情况,第二种情况会在以后介绍。
步骤:
1、生成一个继承自CPreviewView类的CMyPreviewView类。
2、重载两个消息处理函数OnActivateView() 和 OnUpdateNumPageChange()。
作者在实际开发过程中,以为只要重载第一个函数就好了,但是那样不能改变NumPage(两页、一页按钮)按钮的外观,因为在OnActiveView之后实际上又调用了CPreviewView类的OnUpdateNumPageChange()函数,而CPreviewView类的OnUpdateNumPageChange()函数会把在OnActivateView中对NumPage修改的外观重置。
3、为了让按钮按照实际情况进行更新(当放大按钮放到最大,放大按钮变灰等)。
对应代码:
1、CMyPreviewView::OnActivateView(BOOL bActivate, CView*, CView*)
{
if(bActivate)
{
if(m_pToolBar)
{
m_pToolBar->SetDlgItemText(AFX_ID_PREVIEW_PRINT, _T("打印(&P)") ;
//设置另外几个按钮
}
}
}
2、void MyPreviewView::OnUpdateNumPageChange(CCmdUI* pCmdUI){
CPreviewView::OnUpdateNumPageChange(pCmdUI);
UINT nPages = (m_nZoomState == ZOOM_OUT ? m_nPages : m_nZoomOutPages);
if (nPages == 1)
pCmdUI->SetText(_T("两页(&T)");
else
pCmdUI->SetText(_T("一页(&O)");}
3、
void CMyPreviewView::OnDraw(CDC* pDC)
{
CPreviewView::OnDraw(pDC);
m_pToolBar->PostMessage(WM_IDLEUPDATECMDUI,(WPARAM) TRUE) ;
}
参考文献:
Localizing print preview
http://www.codeproject.com/printing/EbPrintPreviewTest.asp