是这样,项目使用的是MFC自带的打印预览组件,里面的按钮有【prin】、【next page】、【prev page】等,现我想改变下这些按钮的名称,但是不知道怎么获得它的句柄,求教各位大侠 了。200分相送
解决方案 »
- 在服务中无法启动应用程序界面
- 如何减小界面与内部程序之间的偶合性?
- 在分割视图中如何获取子视图的指针?
- usb厂家是否提供函数库 发表下看法,都有分的
- CEdit 控件回车整个dialogbar的内容丢失,怎么回事?
- API编程 添加快捷键(键盘加速键)不成功
- 想把一个对话框嵌入到另一个对话框中,
- CRecordView 使用的一个小问题。
- 摸态窗口不会刷新
- 这是什么问题?fatal error C1010: unexpected end of file while looking for precompiled header directive
- 视图拖放
- 控制另一程序中的SysTreeView32控件
CRuntimeClass* pPreviewViewClass, CPrintPreviewState* pState)
{
ASSERT_VALID_IDR(nIDResource);
ASSERT_VALID(pPrintView);
ASSERT(pPreviewViewClass != NULL);
ASSERT(pPreviewViewClass->IsDerivedFrom(RUNTIME_CLASS(CPreviewView)));
ASSERT(pState != NULL); CFrameWnd* pParent = STATIC_DOWNCAST(CFrameWnd, AfxGetMainWnd());
ASSERT_VALID(pParent); CCreateContext context;
context.m_pCurrentFrame = pParent;
context.m_pCurrentDoc = GetDocument();
context.m_pLastView = this; // Create the preview view object
CPreviewView* pView = (CPreviewView*)pPreviewViewClass->CreateObject();
if (pView == NULL)
{
TRACE0("Error: Failed to create preview view.\n");
return FALSE;
}
ASSERT_KINDOF(CPreviewView, pView);
pView->m_pPreviewState = pState; // save pointer pParent->OnSetPreviewMode(TRUE, pState); // Take over Frame Window // Create the toolbar from the dialog resource
pView->m_pToolBar = new CDialogBar;
if (!pView->m_pToolBar->Create(pParent, MAKEINTRESOURCE(nIDResource),
CBRS_TOP, AFX_IDW_PREVIEW_BAR))
{
TRACE0("Error: Preview could not create toolbar dialog.\n");
pParent->OnSetPreviewMode(FALSE, pState); // restore Frame Window
delete pView->m_pToolBar; // not autodestruct yet
pView->m_pToolBar = NULL;
pView->m_pPreviewState = NULL; // do not delete state structure
delete pView;
return FALSE;
}
pView->m_pToolBar->m_bAutoDelete = TRUE; // automatic cleanup // Create the preview view as a child of the App Main Window. This
// is a sibling of this view if this is an SDI app. This is NOT a sibling
// if this is an MDI app. if (!pView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0,0,0,0), pParent, AFX_IDW_PANE_FIRST, &context))
{
TRACE0("Error: couldn't create preview view for frame.\n");
pParent->OnSetPreviewMode(FALSE, pState); // restore Frame Window
pView->m_pPreviewState = NULL; // do not delete state structure
delete pView;
return FALSE;
} // Preview window shown now pState->pViewActiveOld = pParent->GetActiveView();
CView* pActiveView = pParent->GetActiveFrame()->GetActiveView();
if (pActiveView != NULL)
pActiveView->OnActivateView(FALSE, pActiveView, pActiveView); if (!pView->SetPrintView(pPrintView))
{
pView->OnPreviewClose();
return TRUE; // signal that OnEndPrintPreview was called
} pParent->SetActiveView(pView); // set active view - even for MDI // update toolbar and redraw everything
pView->m_pToolBar->SendMessage(WM_IDLEUPDATECMDUI, (WPARAM)TRUE);
pParent->RecalcLayout(); // position and size everything
pParent->UpdateWindow(); return TRUE;
}
希望对楼主有帮助。
C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include\l.chs\AFXPRINT.RC我试着修改了但不起作用。
这个就是那个DialogBar,如果想修改这下按钮,建议继承CPreviewView,然后取得m_pToolBar,然后得到各个ID,才可以修改!
AFX_IDD_PREVIEW_TOOLBAR DIALOG PRELOAD DISCARDABLE 0, 0, 330, 16
STYLE WS_CHILD | 0x04
FONT 8, "MS Shell Dlg"
BEGIN
PUSHBUTTON "打印(&P)...",AFX_ID_PREVIEW_PRINT,2,2,44,12
PUSHBUTTON "下一页(&N)",AFX_ID_PREVIEW_NEXT,48,2,44,12
PUSHBUTTON "前一页(&V)",AFX_ID_PREVIEW_PREV,94,2,44,12
PUSHBUTTON "",AFX_ID_PREVIEW_NUMPAGE,140,2,44,12
PUSHBUTTON "放大(&I)",AFX_ID_PREVIEW_ZOOMIN,186,2,44,12
PUSHBUTTON "缩小(&O)",AFX_ID_PREVIEW_ZOOMOUT,232,2,44,12
PUSHBUTTON "关闭(&C)",AFX_ID_PREVIEW_CLOSE,278,2,44,12
END
你只是想把 按钮上的button换成中文的, 还是想改成其他的名称?
主要调用的是这个函数:void CView::OnFilePrintPreview()
而void CView::OnFilePrintPreview()调用的是 BOOL CView::DoPrintPreview(UINT nIDResource, CView* pPrintView,
CRuntimeClass* pPreviewViewClass, CPrintPreviewState* pState)
你可以在调用处,不要调用OnFilePrintPreview,而是调用一个自己命名的函数,然后,里面内容与OnFilePrintPreview差不多,只是将BOOL CView::DoPrintPreview这个地方改一下,改成其它函数名称,比如是BOOL DoPrintPreview_back(....),参数一样,然后写这个函数,里面内容也差不多,只是在这儿,改写名称就行了!
pView->m_pToolBar = new CDialogBar;
if (!pView->m_pToolBar->Create(pParent, MAKEINTRESOURCE(nIDResource),
CBRS_TOP, AFX_IDW_PREVIEW_BAR))
{
TRACE0("Error: Preview could not create toolbar dialog.\n");
pParent->OnSetPreviewMode(FALSE, pState); // restore Frame Window
delete pView->m_pToolBar; // not autodestruct yet
pView->m_pToolBar = NULL;
pView->m_pPreviewState = NULL; // do not delete state structure
delete pView;
return FALSE;
}
在这段代码的后面,改写一下:
pView->m_pToolBar->GetDlgItem(AFX_ID_PREVIEW_PRINT)->SetWindowText("print other name");
其它的也一样改!
这样改就是有点繁,但是,基本有效!
自己界面的资源你肯定已经实现这一步了~打印对话框也一样1. 把不同语言的 C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include\l.xxxlang\AFXPRINT.RC
分别封装为不同的xxx_lang_dll2. 调用的时候
HINSTANCE hOldRes = AfxGetResourceHandle();
AfxSetResourceHandle(hDll); // hDll 是 LoadLibrary("xxx_lang_dll") 的返回值
// call print dlg
AfxSetResourceHandle(hOldRes);
// Preview Toolbar Dialog
AFX_IDD_PREVIEW_TOOLBAR DIALOG PRELOAD DISCARDABLE 0, 0, 330, 16
STYLE WS_CHILD | 0x04
FONT 8, "MS Shell Dlg"
BEGIN
PUSHBUTTON "打印(&P)...",AFX_ID_PREVIEW_PRINT,2,2,44,12
PUSHBUTTON "下一页(&N)",AFX_ID_PREVIEW_NEXT,48,2,44,12
PUSHBUTTON "前一页(&V)",AFX_ID_PREVIEW_PREV,94,2,44,12
PUSHBUTTON "",AFX_ID_PREVIEW_NUMPAGE,140,2,44,12
PUSHBUTTON "放大(&I)",AFX_ID_PREVIEW_ZOOMIN,186,2,44,12
PUSHBUTTON "缩小(&O)",AFX_ID_PREVIEW_ZOOMOUT,232,2,44,12
PUSHBUTTON "关闭(&C)",AFX_ID_PREVIEW_CLOSE,278,2,44,12
END然后在你自己的工程里修改
把AFX_IDD_PREVIEW_TOOLBAR改为你自己的定义,如IDD_PREVIEW_TOOLBAR,并在resource.h 加上定义#define IDD_PREVIEW_TOOLBAR 150(这个值自己定义)
IDD_PREVIEW_TOOLBAR DIALOG PRELOAD DISCARDABLE 0, 0, 330, 16
STYLE WS_CHILD | 0x04
FONT 8, "MS Shell Dlg"
BEGIN
PUSHBUTTON "my打印(&P)...",AFX_ID_PREVIEW_PRINT,2,2,44,12
PUSHBUTTON "my下一页(&N)",AFX_ID_PREVIEW_NEXT,48,2,44,12
PUSHBUTTON "my前一页(&V)",AFX_ID_PREVIEW_PREV,94,2,44,12
PUSHBUTTON "",AFX_ID_PREVIEW_NUMPAGE,140,2,44,12
PUSHBUTTON "my放大(&I)",AFX_ID_PREVIEW_ZOOMIN,186,2,44,12
PUSHBUTTON "my缩小(&O)",AFX_ID_PREVIEW_ZOOMOUT,232,2,44,12
PUSHBUTTON "my关闭(&C)",AFX_ID_PREVIEW_CLOSE,278,2,44,12
END在你自己的view处理ID_FILE_PRINT_PREVIEW时间
并把系统生成的去掉//这个是系统生成的默认调用CView的,要去掉 ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &Clsdi1View::OnFilePrintPreview)
#include <afxpriv.h>
void Clsdi1View::OnFilePrintPreview()
{
CPrintPreviewState* pState = new CPrintPreviewState; TRY
{//IDD_PREVIEW_TOOLBAR.自己定义的那个资源
if (!DoPrintPreview(IDD_PREVIEW_TOOLBAR, this,
RUNTIME_CLASS(CPreviewView), pState))
{
TRACE(traceAppMsg, 0, "Error: DoPrintPreview failed.\n");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
delete pState; // preview failed to initialize, delete State now
}
}
CATCH_ALL(e)
{
delete pState;
THROW_LAST();
}
END_CATCH_ALL
}
CPrintPreviewState* pState = new CPrintPreviewState;
if (!DoPrintPreview(IDD_PRINT_PREVIEW, this, RUNTIME_CLASS(CPreviewView), pState))
{
// In derived classes, reverse special window handling here for
// Preview failure case
TRACE0("Error: DoPrintPreview failed.\n");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
delete pState; // preview failed to initialize, delete State now
pState = NULL;
}
将其中的资源部分替换掉,就可以使用了 。