void CContourView::OnMouseMove( UINT nFlags, CPoint point ) { // TODO: Add your message handler code here and/or call default CDC* dc; RECT therect; CString buffer; POINT pt( point ); double zval; dc = this->GetDC(); this->GetClientRect( &therect ); dc->DPtoLP( &therect ); dc->DPtoLP( &pt ); buffer.Format( " " ); TextOut( dc->m_hDC, therect.left, therect.top, buffer, buffer.GetLength() ); if ( m_pTriangle->IsInControlDots( pt, zval ) == true ) buffer.Format( "x=%7d y=%7d z=%7.2f", pt.x, pt.y, zval ); else buffer.Format( "x=%7d y=%7d", pt.x, pt.y ); TextOut( dc->m_hDC, therect.left, therect.top, buffer, buffer.GetLength() ); CLogScrollView::OnMouseMove( nFlags, point ); }
void CVisualSynanView::Recalculate(CDC& clDC, CPrintInfo* pInfo) { if( GetDocument()->NoSentences() ) return; //selecting choosen font CFont* pOldFont = NULL; //creating memory DC CRect clientRect; GetClientRect(&clientRect); OnPrepareDC(&clDC,pInfo); clDC.DPtoLP(&clientRect); if( m_bExistUsefulFont) { pOldFont = clDC.SelectObject(&m_FontForWords); } //calculating sentences coordinates GetDocument()->CalculateCoordinates(&clDC,clientRect.right, m_bShowGroups); if( pOldFont ) clDC.SelectObject(pOldFont); }
BOOL CObjDoc::OnOpenDocument(LPCTSTR lpszPathName) { if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; string pathStr = lpszPathName; m_Object = new CWavefrontObj(pathStr); CRect tRect(0, 0, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT); CDC tDC; CBitmap *oldBitmap; // CRgn ClipRgn; CDC scrDC; scrDC.Attach(GetDC(GetDesktopWindow())); // ClipRgn.CreateRectRgn(tRect.left, tRect.top, tRect.right, tRect.bottom); tDC.CreateCompatibleDC(&scrDC); tDC.SetMapMode(scrDC.GetMapMode()); tDC.DPtoLP(&tRect); tDC.SetWindowExt(tRect.Size()); tDC.SetWindowOrg(tRect.left, tRect.top); tDC.LPtoDP(&tRect); tDC.SetViewportExt(tRect.Size()); tDC.SetViewportOrg(tRect.left, tRect.top); m_ThumbNail.CreateCompatibleBitmap(&scrDC, tRect.Width(), tRect.Height()); oldBitmap = tDC.SelectObject(&m_ThumbNail); tDC.FillSolidRect(tRect, RGB(0xff, 0xff, 0xff)); // create a thumbnail CObjView::RenderImage(&tDC, this, tRect); tDC.SelectObject(oldBitmap); m_FileName = lpszPathName; GetFileTitle(m_FileName, m_DisplayName.GetBuffer(_MAX_FNAME), _MAX_FNAME); m_DisplayName.ReleaseBuffer(); // made it this far so add to program list of objects gObjLoader->m_WavfObjects.push_back(m_Object); OBJECTSTRUCT os; os.name = &m_DisplayName; os.fileName = &m_FileName; os.thumbNail = &m_ThumbNail; os.pageIndex = &gObjLoader->m_PageIndex; os.rsrcIndex = &m_ObjectIndex; os.object = m_Object; gObjLoader->m_ProgramInfo->BroadcastMessage( AddObjectMessage, &os); return TRUE; }
void CView::OnFilePrint() { // get default print info CPrintInfo printInfo; ASSERT(printInfo.m_pPD != NULL); // must be set if (LOWORD(GetCurrentMessage()->wParam) == ID_FILE_PRINT_DIRECT) { CCommandLineInfo* pCmdInfo = AfxGetApp()->m_pCmdInfo; if (pCmdInfo != NULL) { if (pCmdInfo->m_nShellCommand == CCommandLineInfo::FilePrintTo) { printInfo.m_pPD->m_pd.hDC = ::CreateDC(pCmdInfo->m_strDriverName, pCmdInfo->m_strPrinterName, pCmdInfo->m_strPortName, NULL); if (printInfo.m_pPD->m_pd.hDC == NULL) { AfxMessageBox(AFX_IDP_FAILED_TO_START_PRINT); return; } } } printInfo.m_bDirect = TRUE; } if (OnPreparePrinting(&printInfo)) { // hDC must be set (did you remember to call DoPreparePrinting?) ASSERT(printInfo.m_pPD->m_pd.hDC != NULL); // gather file to print to if print-to-file selected CString strOutput; if (printInfo.m_pPD->m_pd.Flags & PD_PRINTTOFILE && !printInfo.m_bDocObject) { // construct CFileDialog for browsing CString strDef(MAKEINTRESOURCE(AFX_IDS_PRINTDEFAULTEXT)); CString strPrintDef(MAKEINTRESOURCE(AFX_IDS_PRINTDEFAULT)); CString strFilter(MAKEINTRESOURCE(AFX_IDS_PRINTFILTER)); CString strCaption(MAKEINTRESOURCE(AFX_IDS_PRINTCAPTION)); CFileDialog dlg(FALSE, strDef, strPrintDef, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, strFilter, NULL, 0); dlg.m_ofn.lpstrTitle = strCaption; if (dlg.DoModal() != IDOK) return; // set output device to resulting path name strOutput = dlg.GetPathName(); } // set up document info and start the document printing process CString strTitle; CDocument* pDoc = GetDocument(); if (pDoc != NULL) strTitle = pDoc->GetTitle(); else EnsureParentFrame()->GetWindowText(strTitle); DOCINFO docInfo; memset(&docInfo, 0, sizeof(DOCINFO)); docInfo.cbSize = sizeof(DOCINFO); docInfo.lpszDocName = strTitle; CString strPortName; if (strOutput.IsEmpty()) { docInfo.lpszOutput = NULL; strPortName = printInfo.m_pPD->GetPortName(); } else { docInfo.lpszOutput = strOutput; AfxGetFileTitle(strOutput, strPortName.GetBuffer(_MAX_PATH), _MAX_PATH); } // setup the printing DC CDC dcPrint; if (!printInfo.m_bDocObject) { dcPrint.Attach(printInfo.m_pPD->m_pd.hDC); // attach printer dc dcPrint.m_bPrinting = TRUE; } OnBeginPrinting(&dcPrint, &printInfo); if (!printInfo.m_bDocObject) dcPrint.SetAbortProc(_AfxAbortProc); // disable main window while printing & init printing status dialog // Store the Handle of the Window in a temp so that it can be enabled // once the printing is finished CWnd * hwndTemp = AfxGetMainWnd(); hwndTemp->EnableWindow(FALSE); CPrintingDialog dlgPrintStatus(this); CString strTemp; dlgPrintStatus.SetDlgItemText(AFX_IDC_PRINT_DOCNAME, strTitle); dlgPrintStatus.SetDlgItemText(AFX_IDC_PRINT_PRINTERNAME, printInfo.m_pPD->GetDeviceName()); dlgPrintStatus.SetDlgItemText(AFX_IDC_PRINT_PORTNAME, strPortName); dlgPrintStatus.ShowWindow(SW_SHOW); dlgPrintStatus.UpdateWindow(); // start document printing process if (!printInfo.m_bDocObject) { printInfo.m_nJobNumber = dcPrint.StartDoc(&docInfo); if (printInfo.m_nJobNumber == SP_ERROR) { // enable main window before proceeding hwndTemp->EnableWindow(TRUE); // cleanup and show error message OnEndPrinting(&dcPrint, &printInfo); dlgPrintStatus.DestroyWindow(); dcPrint.Detach(); // will be cleaned up by CPrintInfo destructor AfxMessageBox(AFX_IDP_FAILED_TO_START_PRINT); return; } } // Guarantee values are in the valid range UINT nEndPage = printInfo.GetToPage(); UINT nStartPage = printInfo.GetFromPage(); if (nEndPage < printInfo.GetMinPage()) nEndPage = printInfo.GetMinPage(); if (nEndPage > printInfo.GetMaxPage()) nEndPage = printInfo.GetMaxPage(); if (nStartPage < printInfo.GetMinPage()) nStartPage = printInfo.GetMinPage(); if (nStartPage > printInfo.GetMaxPage()) nStartPage = printInfo.GetMaxPage(); int nStep = (nEndPage >= nStartPage) ? 1 : -1; nEndPage = (nEndPage == 0xffff) ? 0xffff : nEndPage + nStep; VERIFY(strTemp.LoadString(AFX_IDS_PRINTPAGENUM)); // If it's a doc object, we don't loop page-by-page // because doc objects don't support that kind of levity. BOOL bError = FALSE; if (printInfo.m_bDocObject) { OnPrepareDC(&dcPrint, &printInfo); OnPrint(&dcPrint, &printInfo); } else { // begin page printing loop for (printInfo.m_nCurPage = nStartPage; printInfo.m_nCurPage != nEndPage; printInfo.m_nCurPage += nStep) { OnPrepareDC(&dcPrint, &printInfo); // check for end of print if (!printInfo.m_bContinuePrinting) break; // write current page TCHAR szBuf[80]; ATL_CRT_ERRORCHECK_SPRINTF(_sntprintf_s(szBuf, _countof(szBuf), _countof(szBuf) - 1, strTemp, printInfo.m_nCurPage)); dlgPrintStatus.SetDlgItemText(AFX_IDC_PRINT_PAGENUM, szBuf); // set up drawing rect to entire page (in logical coordinates) printInfo.m_rectDraw.SetRect(0, 0, dcPrint.GetDeviceCaps(HORZRES), dcPrint.GetDeviceCaps(VERTRES)); dcPrint.DPtoLP(&printInfo.m_rectDraw); // attempt to start the current page if (dcPrint.StartPage() < 0) { bError = TRUE; break; } // must call OnPrepareDC on newer versions of Windows because // StartPage now resets the device attributes. OnPrepareDC(&dcPrint, &printInfo); ASSERT(printInfo.m_bContinuePrinting); // page successfully started, so now render the page OnPrint(&dcPrint, &printInfo); // If the user restarts the job when it's spooling, all // subsequent calls to EndPage returns < 0. The first time // GetLastError returns ERROR_PRINT_CANCELLED if (dcPrint.EndPage() < 0 && (GetLastError()!= ERROR_SUCCESS)) { HANDLE hPrinter; if (!OpenPrinter(LPTSTR(printInfo.m_pPD->GetDeviceName().GetBuffer()), &hPrinter, NULL)) { bError = TRUE; break; } DWORD cBytesNeeded; if(!GetJob(hPrinter,printInfo.m_nJobNumber,1,NULL,0,&cBytesNeeded)) { if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { bError = TRUE; break; } } JOB_INFO_1 *pJobInfo; if((pJobInfo = (JOB_INFO_1 *)malloc(cBytesNeeded))== NULL) { bError = TRUE; break; } DWORD cBytesUsed; BOOL bRet = GetJob(hPrinter,printInfo.m_nJobNumber,1,LPBYTE(pJobInfo),cBytesNeeded,&cBytesUsed); DWORD dwJobStatus = pJobInfo->Status; free(pJobInfo); pJobInfo = NULL; // if job status is restart, just continue if(!bRet || !(dwJobStatus & JOB_STATUS_RESTART) ) { bError = TRUE; break; } } if(!_AfxAbortProc(dcPrint.m_hDC, 0)) { bError = TRUE; break; } } } // cleanup document printing process if (!printInfo.m_bDocObject) { if (!bError) dcPrint.EndDoc(); else dcPrint.AbortDoc(); } hwndTemp->EnableWindow(); // enable main window OnEndPrinting(&dcPrint, &printInfo); // clean up after printing dlgPrintStatus.DestroyWindow(); dcPrint.Detach(); // will be cleaned up by CPrintInfo destructor } }
void CPrint::OnPrint() { if (ParentWnd == NULL) return; // get default print info CPrintInfo printInfo; ASSERT(printInfo.m_pPD != NULL); // must be set /* if (LOWORD(GetCurrentMessage()->wParam) == ID_FILE_PRINT_DIRECT) { CCommandLineInfo* pCmdInfo = AfxGetApp()->m_pCmdInfo; if (pCmdInfo != NULL) { if (pCmdInfo->m_nShellCommand == CCommandLineInfo::FilePrintTo) { printInfo.m_pPD->m_pd.hDC = ::CreateDC(pCmdInfo->m_strDriverName, pCmdInfo->m_strPrinterName, pCmdInfo->m_strPortName, NULL); if (printInfo.m_pPD->m_pd.hDC == NULL) { AfxMessageBox(AFX_IDP_FAILED_TO_START_PRINT); return; } } } printInfo.m_bDirect = TRUE; } */ if (OnPreparePrinting(&printInfo)) { // hDC must be set (did you remember to call DoPreparePrinting?) ASSERT(printInfo.m_pPD->m_pd.hDC != NULL); // gather file to print to if print-to-file selected CString strOutput; if (printInfo.m_pPD->m_pd.Flags & PD_PRINTTOFILE && !printInfo.m_bDocObject) { // construct CFileDialog for browsing CString strDef(MAKEINTRESOURCE(AFX_IDS_PRINTDEFAULTEXT)); CString strPrintDef(MAKEINTRESOURCE(AFX_IDS_PRINTDEFAULT)); CString strFilter(MAKEINTRESOURCE(AFX_IDS_PRINTFILTER)); CString strCaption(MAKEINTRESOURCE(AFX_IDS_PRINTCAPTION)); CFileDialog dlg(FALSE, strDef, strPrintDef, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, strFilter); dlg.m_ofn.lpstrTitle = strCaption; if (dlg.DoModal() != IDOK) return; // set output device to resulting path name strOutput = dlg.GetPathName(); } // set up document info and start the document printing process DOCINFO docInfo; memset(&docInfo, 0, sizeof(DOCINFO)); docInfo.cbSize = sizeof(DOCINFO); docInfo.lpszDocName = PrintTitle; CString strPortName; int nFormatID; if (strOutput.IsEmpty()) { docInfo.lpszOutput = NULL; strPortName = printInfo.m_pPD->GetPortName(); nFormatID = AFX_IDS_PRINTONPORT; } else { docInfo.lpszOutput = strOutput; strPortName = "Miracle"; /*AfxGetFileTitle(strOutput, strPortName.GetBuffer(_MAX_PATH), _MAX_PATH);*/ nFormatID = AFX_IDS_PRINTTOFILE; } // setup the printing DC CDC dcPrint; if (!printInfo.m_bDocObject) { dcPrint.Attach(printInfo.m_pPD->m_pd.hDC); // attach printer dc dcPrint.m_bPrinting = TRUE; } OnBeginPrinting(&dcPrint, &printInfo); if (!printInfo.m_bDocObject) dcPrint.SetAbortProc(AbortProc); // disable main window while printing & init printing status dialog AfxGetMainWnd()->EnableWindow(FALSE); CPrintingDialog dlgPrintStatus(ParentWnd); ghwndAbort = dlgPrintStatus.m_hWnd; CString strTemp; dlgPrintStatus.SetDlgItemText(AFX_IDC_PRINT_DOCNAME, PrintTitle); dlgPrintStatus.SetDlgItemText(AFX_IDC_PRINT_PRINTERNAME, printInfo.m_pPD->GetDeviceName()); AfxFormatString1(strTemp, nFormatID, strPortName); dlgPrintStatus.SetDlgItemText(AFX_IDC_PRINT_PORTNAME, strTemp); dlgPrintStatus.ShowWindow(SW_SHOW); dlgPrintStatus.UpdateWindow(); // start document printing process if (!printInfo.m_bDocObject && dcPrint.StartDoc(&docInfo) == SP_ERROR) { // enable main window before proceeding AfxGetMainWnd()->EnableWindow(TRUE); // cleanup and show error message OnEndPrinting(&dcPrint, &printInfo); dlgPrintStatus.DestroyWindow(); dcPrint.Detach(); // will be cleaned up by CPrintInfo destructor AfxMessageBox(AFX_IDP_FAILED_TO_START_PRINT); return; } // Guarantee values are in the valid range UINT nEndPage = printInfo.GetToPage(); UINT nStartPage = printInfo.GetFromPage(); if (nEndPage < printInfo.GetMinPage()) nEndPage = printInfo.GetMinPage(); if (nEndPage > printInfo.GetMaxPage()) nEndPage = printInfo.GetMaxPage(); if (nStartPage < printInfo.GetMinPage()) nStartPage = printInfo.GetMinPage(); if (nStartPage > printInfo.GetMaxPage()) nStartPage = printInfo.GetMaxPage(); int nStep = (nEndPage >= nStartPage) ? 1 : -1; nEndPage = (nEndPage == 0xffff) ? 0xffff : nEndPage + nStep; VERIFY(strTemp.LoadString(AFX_IDS_PRINTPAGENUM)); // If it's a doc object, we don't loop page-by-page // because doc objects don't support that kind of levity. BOOL bError = FALSE; // Print Loop // Burada DocObject kýsmý silindi { // begin page printing loop for (printInfo.m_nCurPage = nStartPage; printInfo.m_nCurPage != nEndPage; printInfo.m_nCurPage += nStep) { OnPrepareDC(&dcPrint, &printInfo); // check for end of print if (!printInfo.m_bContinuePrinting) break; // write current page TCHAR szBuf[80]; wsprintf(szBuf, strTemp, printInfo.m_nCurPage); dlgPrintStatus.SetDlgItemText(AFX_IDC_PRINT_PAGENUM, szBuf); // set up drawing rect to entire page (in logical coordinates) printInfo.m_rectDraw.SetRect(0, 0, dcPrint.GetDeviceCaps(HORZRES), dcPrint.GetDeviceCaps(VERTRES)); dcPrint.DPtoLP(&printInfo.m_rectDraw); // attempt to start the current page if (dcPrint.StartPage() < 0) { DebugMessage("Error on print 2"); bError = TRUE; break; } // must call OnPrepareDC on newer versions of Windows because // StartPage now resets the device attributes. //if (afxData.bMarked4) OnPrepareDC(&dcPrint, &printInfo); ASSERT(printInfo.m_bContinuePrinting); // page successfully started, so now render the page OnPrint(&dcPrint, &printInfo); TRACE("on print\n"); int stat = dcPrint.EndPage(); if (stat < 0 || !AbortProc(dcPrint.m_hDC, 0)) { bError = TRUE; CString str; str.Format("End Page = %ld,Abort = %ld",stat,gbAbort); DebugMessage(str); DebugMessage("Error on print"); break; } } } // cleanup document printing process if (!printInfo.m_bDocObject) { if (!bError) dcPrint.EndDoc(); else dcPrint.AbortDoc(); } AfxGetMainWnd()->EnableWindow(); // enable main window OnEndPrinting(&dcPrint, &printInfo); // clean up after printing dlgPrintStatus.DestroyWindow(); dcPrint.Detach(); // will be cleaned up by CPrintInfo destructor } }
void CSpiroView::OnLButtonUp(UINT nFlags, CPoint point) { if (m_bMovingPencil) { CImageList& il = GetApp()->m_imageList; il.DragLeave(this); il.EndDrag(); ::ShowCursor(TRUE); ENSURE(m_pWheel != NULL); CDC* pDC = GetDC(); ENSURE(pDC != NULL); OnPrepareDC(pDC); // undo the effect of the zoom factor on the point value pDC->DPtoLP(&point); point.x = point.x * m_nZoomDenom / m_nZoomNumer; point.y = point.y * m_nZoomDenom / m_nZoomNumer; if (m_pWheel->SetPenLocation(this, pDC, point, m_nZoomNumer, m_nZoomDenom)) { GetDocument()->TransferCurrentFigure(); CreateFigure(); // create figure for the new pen location } ReleaseDC(pDC); ReleaseCapture(); m_bMovingPencil = false; } else if (m_pFigureDrag != NULL) { ENSURE(m_pILDragFigure != NULL); CPoint ptWindow(point); CDC* pDC = GetDC(); ENSURE(pDC != NULL); // get new position for the figure being drawn and insert it into figure arrays CPoint ptCorner(point.x - m_ptHotSpotDragFigure.x, point.y - m_ptHotSpotDragFigure.y); OnPrepareDC(pDC); pDC->DPtoLP(&ptCorner); // convert corner of figure to logical coords ptCorner.x = ptCorner.x * m_nZoomDenom / m_nZoomNumer; // undo effect of zooming ptCorner.y = ptCorner.y * m_nZoomDenom / m_nZoomNumer; if (m_pFigureDrag->MoveFigure(ptCorner, GetDocument())) // move figure to new place { CSpiroRect rect; m_pFigureDrag->GetBoundingRect(&rect); rect.Scale(m_nZoomNumer, m_nZoomDenom); pDC->LPtoDP(&rect); InvalidateRect(&rect); ReleaseDC(pDC); } m_pILDragFigure->DragLeave(this); m_pILDragFigure->EndDrag(); UpdateWindow(); delete m_pILDragFigure; delete m_pBitmapDragFigure; m_pBitmapDragFigure = NULL; m_pILDragFigure = NULL; ReleaseCapture(); m_pFigureDrag = NULL; } CScrollView::OnLButtonUp(nFlags, point); }
void CSpiroView::OnLButtonDown(UINT nFlags, CPoint point) { if (m_bDrawingActive) return; if (m_bDroppingAnchor || m_bDroppingWheel) { ASSERT(!m_bDrawingDone); CWheel* pWheelDrop = NULL; CRing* pRingDrop = NULL; CSpiroDoc* pDoc = GetDocument(); ENSURE(pDoc != NULL); //convert the client coordinates to logical coordinates CDC* pDC = GetDC(); ENSURE(pDC != NULL); OnPrepareDC(pDC); // Convert client coordinates to Logical coordinates CPoint pointScaled(point); pDC->DPtoLP(&pointScaled); point.x = pointScaled.x * m_nZoomDenom / m_nZoomNumer; // undo scaling effects point.y = pointScaled.y * m_nZoomDenom / m_nZoomNumer; CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd(); ENSURE(pFrame != NULL && pFrame->IsKindOf(RUNTIME_CLASS(CMainFrame))); if (m_bDroppingAnchor) { ASSERT(m_iPieceDropped >= 0 && m_iPieceDropped < TOTALRINGS); pRingDrop = new CRing(CRing::m_rgnRads[m_iPieceDropped] - RINGWIDTH, CRing::m_rgnRads[m_iPieceDropped], CRing::m_rgco[m_iPieceDropped], RGB(0, 0, 0)); ENSURE(pRingDrop != NULL); m_bDroppingAnchor = false; ENSURE(m_pAnchor == NULL); m_pAnchor = pRingDrop; m_pAnchor->SetPosition(point); m_dDataAnchorFirst = m_pAnchor->GetFigData(); } else if (m_bDroppingWheel) { CBasePiece** ppPiece = (m_pAnchor == NULL? &m_pAnchor : &m_pWheel); ASSERT(m_iPieceDropped >= 0 && m_iPieceDropped < TOTALWHEELS); pWheelDrop = new CWheel(CWheel::m_rgnRads[m_iPieceDropped], CWheel::m_rgco[m_iPieceDropped], CWheel::m_rgcoPattern[m_iPieceDropped]); ENSURE(pWheelDrop != NULL); ENSURE(*ppPiece == NULL); *ppPiece = pWheelDrop; m_bDroppingWheel = false; (*ppPiece)->SetPosition(point); if (m_pWheel != NULL) { m_pWheel->SetWheelMode(); // set the default pen location. pDC and zoom ration are dummies m_pWheel->SetPenLocation(this, pDC, CPoint(0, 0), 1, 1); ENSURE(m_pAnchor != NULL); CPoint ptContact; double dAngle; // Get contact position from the anchor and set wheel position // Decides if wheel is internal in case of being a ring m_pAnchor->GetContactPosition(pointScaled, m_nZoomNumer, m_nZoomDenom, ptContact, dAngle); if (m_pWheel->GetPerimeter() >= m_pAnchor->GetPerimeter()) { pointScaled.x = 0; pointScaled.y = 0; // force the wheel out of the ring // get contact position again to make sure it's right m_pAnchor->GetContactPosition(pointScaled, m_nZoomNumer, m_nZoomDenom, ptContact, dAngle); } m_pWheel->SetPosition(ptContact, dAngle); m_dDataWheelFirst = m_pWheel->GetFigData(); m_ptWheelPosFirst = m_pWheel->m_ptPos; PressButton(0); // get the color settings for the new wheel CreateFigure(); } m_iPieceDropped += TOTALRINGS + 1; #ifdef _DEBUG int nID = pFrame->m_wndToolBarSpiro.GetItemID(m_iPieceDropped); ASSERT(nID >= ID_ENORMOUSWHEEL && nID <= ID_TINYWHEEL); #endif } // uncheck the button used to select the piece in the toolbar UINT nButtonID = pFrame->m_wndToolBarSpiro.GetItemID(m_iPieceDropped); pFrame->m_wndToolBarSpiro.GetToolBarCtrl().CheckButton(nButtonID, FALSE); // invalidate the region holding the ring CRgn rgn; // region occupied by the piece (m_pWheel != NULL? m_pWheel : m_pAnchor)->GetDevPieceRgn(pDC, &rgn, m_nZoomNumer, m_nZoomDenom, false); InvalidateRgn(&rgn, FALSE); m_iPieceDropped = -1; // reset to keep control on values. ReleaseDC(pDC); return; } // check if the user wants to drag the pen position CDC* pDC = GetDC(); ENSURE(pDC != NULL); OnPrepareDC(pDC); CPoint pointScaled(point); pDC->DPtoLP(&pointScaled); // gets the logical coord point value with scale into account if (m_pWheel != NULL) { if (m_pWheel->HitTest(pDC, point, m_nZoomNumer, m_nZoomDenom) == HIT_PEN_LOCATION) // start drag operation { MSG msg; // if there is a WM_LBUTTONUP in the queue do not drag pencil location if (!::PeekMessage(&msg, m_hWnd, WM_LBUTTONUP, WM_LBUTTONUP, PM_NOREMOVE)) { ClientToScreen(&point); // convert to screen coordinates CRect rectWindow; GetWindowRect(&rectWindow); point.x -= rectWindow.left; point.y -= rectWindow.top; // point relative to windows corner CImageList& il = GetApp()->m_imageList; ::ShowCursor(FALSE); il.BeginDrag(0, CPoint(0, 47)); il.DragEnter(this, point); m_bMovingPencil = true; SetCapture(); } } } for (;;) { CRgn rgn; MSG msg; if (::PeekMessage(&msg, m_hWnd, WM_LBUTTONUP, WM_LBUTTONUP, PM_NOREMOVE)) // no drag is being requested break; if (m_pWheel != NULL) { m_pWheel->GetLogPieceRgn(&rgn, m_nZoomNumer, m_nZoomDenom); if (rgn.PtInRegion(pointScaled)) // clicked on wheel. Don't do anything break; rgn.DeleteObject(); } if (m_pAnchor != NULL) { m_pAnchor->GetLogPieceRgn(&rgn, m_nZoomNumer, m_nZoomDenom); if (rgn.PtInRegion(pointScaled)) // clicked on the anchor break; rgn.DeleteObject(); } // find now if the user clicked on a Figure. The current Figure cannot be dragged. This is by design CSpiroDoc* pDoc = GetDocument(); INT_PTR iPic; CFigure* pFigure; CSpiroRect rect; for (iPic = pDoc->m_arrPFigures.GetUpperBound(); iPic >= 0; iPic--) { pFigure = (CFigure*)pDoc->m_arrPFigures.GetAt(iPic); ENSURE(pFigure != NULL); pFigure->GetBoundingRect(&rect); rect.Scale(m_nZoomNumer, m_nZoomDenom); if (pointScaled.x < rect.left || pointScaled.x >= rect.right || pointScaled.y > rect.top || pointScaled.y <= rect.bottom) { continue; } bool bCopy = (nFlags & MK_CONTROL) == MK_CONTROL; m_pFigureDrag = (bCopy? new CFigure(pFigure) : pFigure); if (!bCopy) pDoc->m_arrPFigures.RemoveAt(iPic); ENSURE(m_pILDragFigure == NULL); // First draw the Figure into a memery DC using an allocated bitmap CDC dcMem; ENSURE(pDC != NULL); VERIFY(dcMem.CreateCompatibleDC(pDC)); dcMem.SetMapMode(MM_SPIRO); dcMem.SetViewportOrg(0, 0); dcMem.SetWindowOrg(rect.left, rect.top); CSpiroRect rectBitmap(rect); dcMem.LPtoDP(&rectBitmap); ASSERT(rectBitmap.left == 0 && rectBitmap.top == 0); int nWidth = rectBitmap.right; int nHeight = rectBitmap.bottom; CBitmap* pbmOld = NULL; ASSERT(m_pBitmapDragFigure == NULL); m_pBitmapDragFigure = new CBitmap(); m_pBitmapDragFigure->CreateCompatibleBitmap(pDC, nWidth, nHeight); pbmOld = dcMem.SelectObject(m_pBitmapDragFigure); // dcMem.PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), WHITENESS); CBrush brush; brush.CreateStockObject(WHITE_BRUSH); dcMem.FillRect(&rect, &brush); m_pFigureDrag->Draw(&dcMem, m_nZoomNumer, m_nZoomDenom, NULL, &rect); dcMem.SelectObject(pbmOld); // Then create an imagelist and add the bitmap to it ASSERT(m_pILDragFigure == NULL); m_pILDragFigure = new CImageList(); VERIFY(m_pILDragFigure->Create(nWidth, nHeight, ILC_COLOR | ILC_MASK, 1, 1)); VERIFY(m_pILDragFigure->Add(m_pBitmapDragFigure, RGB(255, 255, 255)) == 0); m_bStartDrag = true; // Enter the drag on first mouse move //calculate the hot spot for the figure m_ptHotSpotDragFigure.x = pointScaled.x - rect.left; m_ptHotSpotDragFigure.y = pointScaled.y - rect.bottom; pDC->SetWindowOrg(0, rect.top - rect.bottom); pDC->SetViewportOrg(0, 0); pDC->LPtoDP(&m_ptHotSpotDragFigure); m_pILDragFigure->BeginDrag(0, m_ptHotSpotDragFigure); SetCapture(); break; } break; } ReleaseDC(pDC); CScrollView::OnLButtonDown(nFlags, point); }
void CMainFrame::OnOptPrint() { CPrintDialog dlg(FALSE); if (IDOK!=dlg.DoModal()) { return; } HDC hdcPrinter = dlg.GetPrinterDC(); if (hdcPrinter == NULL){ MessageBox("无法找到打印机",NULL,MB_OK|MB_ICONSTOP); }else{ CDC dcPrinter; dcPrinter.Attach(hdcPrinter); // call StartDoc() to begin printing DOCINFO docinfo; memset(&docinfo, 0, sizeof(docinfo)); docinfo.cbSize = sizeof(docinfo); docinfo.lpszDocName = "事件记录报表"; // if it fails, complain and exit gracefully if (dcPrinter.StartDoc(&docinfo) < 0){ MessageBox("无法初始化打印机",NULL,MB_OK|MB_ICONSTOP); }else{ dcPrinter.SetMapMode(MM_TWIPS); CFont *pOldFont; CFont fnt; if(fnt.CreatePointFont(70,"宋体",&dcPrinter)){ pOldFont=(CFont*)dcPrinter.SelectObject(&fnt); }else{ pOldFont=(CFont*)dcPrinter.SelectStockObject(DEVICE_DEFAULT_FONT); } CPoint pt(dcPrinter.GetDeviceCaps(HORZRES),dcPrinter.GetDeviceCaps(VERTRES)); dcPrinter.DPtoLP (&pt); pt.y=-pt.y; CSize sz=dcPrinter.GetTextExtent("序号 "); CSize sz1=dcPrinter.GetTextExtent("报警时间 "); CSize sz2=dcPrinter.GetTextExtent("变量名 "); CSize sz3=dcPrinter.GetTextExtent("变量描述 "); CSize sz4=dcPrinter.GetTextExtent("报警时测量值 "); CSize sz5=dcPrinter.GetTextExtent("单位 "); CSize sz6=dcPrinter.GetTextExtent("报警类型 "); CSize sz7=dcPrinter.GetTextExtent("状态 "); int lineHeight=sz.cy*1.5; int lineCount=(pt.y-sz.cy*10)/lineHeight; if(lineCount<0) return; long id=0; CString str; int i,iPage=0; int cLeftGap=800; while(evtsList[id].valid){ // start a page if (dcPrinter.StartPage() < 0){ MessageBox("无法初始化页",NULL,MB_OK|MB_ICONSTOP); dcPrinter.AbortDoc(); }else{ // actually do some printing //print title iPage++; str.Format("事件记录报表 第%2d页",iPage); dcPrinter.TextOut(cLeftGap,-lineHeight*3,str); //str.Format("序号 事件"); str.Format("序号"); dcPrinter.TextOut(cLeftGap,-lineHeight*5,str); str.Format("报警时间"); dcPrinter.TextOut(cLeftGap+sz.cx,-lineHeight*5,str); str.Format("变量名"); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx,-lineHeight*5,str); str.Format("变量描述"); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx,-lineHeight*5,str); str.Format("报警时测量值"); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx+sz3.cx,-lineHeight*5,str); str.Format("单位"); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx+sz3.cx+sz4.cx,-lineHeight*5,str); str.Format("报警类型"); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx+sz3.cx+sz4.cx+sz5.cx,-lineHeight*5,str); str.Format("状态"); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx+sz3.cx+sz4.cx+sz5.cx+sz6.cx,-lineHeight*5,str); for(i=0;i<lineCount;i++){ if(evtsList[id].valid){ CArgs args; parse_arg_ey(evtsList[id].data, &args, ";"); str.Format("%3d",id); dcPrinter.TextOut(cLeftGap,-lineHeight*(6+i),str); str.Format("%s",args.argv[0]); dcPrinter.TextOut(cLeftGap+sz.cx,-lineHeight*(6+i),str); str.Format("%s",args.argv[2]); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx,-lineHeight*(6+i),str); str.Format("%s",args.argv[1]); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx,-lineHeight*(6+i),str); str.Format("%s",args.argv[6]); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx+sz3.cx,-lineHeight*(6+i),str); str.Format("%s",args.argv[7]); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx+sz3.cx+sz4.cx,-lineHeight*(6+i),str); str.Format("%s",args.argv[4]); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx+sz3.cx+sz4.cx+sz5.cx,-lineHeight*(6+i),str); str.Format("%s",args.argv[5]); dcPrinter.TextOut(cLeftGap+sz.cx+sz1.cx+sz2.cx+sz3.cx+sz4.cx+sz5.cx+sz6.cx,-lineHeight*(6+i),str); id++; }else{ break; } } } dcPrinter.EndPage(); } dcPrinter.SelectObject(pOldFont); dcPrinter.EndDoc(); } } }
BOOL CMlsPrint::Print(CMlsPrintInfo* pInfo, CWnd* pParent) { BOOL fSuccess = FALSE; ASSERT(pInfo != NULL); m_pInfo = pInfo; m_pParent = pParent; if (OnPreparePrinting()) { fSuccess = TRUE; ASSERT(m_pInfo->m_pPD->m_pd.hDC != NULL); CDC dcPrint; dcPrint.Attach(m_pInfo->m_pPD->m_pd.hDC); dcPrint.m_bPrinting = TRUE; m_pDC = &dcPrint; OnBeginPrinting(); OnCreatePrintingDialog(); dcPrint.SetAbortProc(MlsPrintAbortProc); CString docTitle; GetTitle(docTitle); if (docTitle.GetLength() > 31) { docTitle.ReleaseBuffer(31); } DOCINFO docInfo; memset(&docInfo, 0, sizeof(DOCINFO)); docInfo.cbSize = sizeof(DOCINFO); docInfo.lpszDocName = docTitle; // docInfo.lpszOutput = NULL; if (dcPrint.StartDoc(&docInfo) != SP_ERROR) { UINT nEndPage = m_pInfo->GetToPage(); UINT nStartPage = m_pInfo->GetFromPage(); // Guarantee values are in the valid range if (nEndPage < m_pInfo->GetMinPage()) nEndPage = m_pInfo->GetMinPage(); if (nEndPage > m_pInfo->GetMaxPage()) nEndPage = m_pInfo->GetMaxPage(); if (nStartPage < m_pInfo->GetMinPage()) nStartPage = m_pInfo->GetMinPage(); if (nStartPage > m_pInfo->GetMaxPage()) nStartPage = m_pInfo->GetMaxPage(); int nStep = (nEndPage >= nStartPage) ? 1 : -1; nEndPage = (nEndPage == 0xffff) ? 0xffff : nEndPage + nStep; BOOL bError = FALSE; for (m_pInfo->m_nCurPage = nStartPage; !bError && m_pInfo->m_nCurPage != nEndPage; m_pInfo->m_nCurPage += nStep) { OnPrepareDC(); if (!m_pInfo->m_bContinuePrinting) { break; } // Set up drawing rect to entire page (in logical coordinates) m_pInfo->m_rectDraw.SetRect(0, 0, dcPrint.GetDeviceCaps(HORZRES), dcPrint.GetDeviceCaps(VERTRES)); dcPrint.DPtoLP(&m_pInfo->m_rectDraw); OnUpdatePrintingDialog(); VERIFY(dcPrint.StartPage()); OnPrint(); if (dcPrint.EndPage() < 0) { bError = TRUE; } } if (!bError) { dcPrint.EndDoc(); } } else { AfxMessageBox(AFX_IDP_FAILED_TO_START_PRINT); } OnEndPrinting(); OnReleasePrintingDialog(); m_pDC = NULL; } m_pInfo = NULL; return fSuccess; }
BOOL CTextureDoc::TargetOpenDocument(LPCTSTR lpszPathName, bool isOnlyForThumbnail) { CString message; if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE; bool loadedTexture = false; CHashString hashName(lpszPathName); static DWORD msgHash_SetLoadParameters = CHashString(_T("SetLoadParameters")).GetUniqueID(); LOADPARAMETERS lp1; if (!isOnlyForThumbnail) { m_pTextureObject = CRenderObject<>::LoadTexture(lpszPathName); } else { TEXTUREOBJECTPARAMS top; top.Name = &hashName; static DWORD msgHash_GetTexture = CHashString(_T("GetTexture")).GetUniqueID(); m_ToolBox->SendMessage(msgHash_GetTexture, sizeof(TEXTUREOBJECTPARAMS), &top); if (top.TextureObjectInterface == NULL) { static DWORD msgHash_GetLoadParameters = CHashString(_T("GetLoadParameters")).GetUniqueID(); m_ToolBox->SendMessage(msgHash_GetLoadParameters, sizeof(LOADPARAMETERS), &lp1); LOADPARAMETERS lp2(TEX_MEM_SYSMEM); m_ToolBox->SendMessage(msgHash_SetLoadParameters, sizeof(LOADPARAMETERS), &lp2); m_pTextureObject = CRenderObject<>::LoadTexture(lpszPathName); loadedTexture = true; } else { m_pTextureObject = top.TextureObjectInterface; } } if (loadedTexture) m_ToolBox->SendMessage(msgHash_SetLoadParameters, sizeof(LOADPARAMETERS), &lp1); CRect tRect(0, 0, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT); CDC tDC; CBitmap *oldBitmap; CRgn ClipRgn; CDC scrDC; scrDC.Attach(GetDC(GetDesktopWindow())); ClipRgn.CreateRectRgn(tRect.left, tRect.top, tRect.right, tRect.bottom); tDC.CreateCompatibleDC(&scrDC); tDC.SetMapMode(scrDC.GetMapMode()); tDC.DPtoLP(&tRect); tDC.SetWindowExt(tRect.Size()); tDC.SetWindowOrg(tRect.left, tRect.top); tDC.LPtoDP(&tRect); tDC.SetViewportExt(tRect.Size()); tDC.SetViewportOrg(tRect.left, tRect.top); m_ThumbNail.CreateCompatibleBitmap(&scrDC, tRect.Width(), tRect.Height()); oldBitmap = tDC.SelectObject(&m_ThumbNail); tDC.FillSolidRect(tRect, RGB(0xff, 0x00, 0x00)); // create a thumbnail CTextureView::RenderImage(&tDC, this, tRect); tDC.SelectObject(oldBitmap); if (m_pTextureObject != NULL) GetFileTitle(m_pTextureObject->GetTextureName()->GetString(), m_DisplayName.GetBuffer(_MAX_FNAME), _MAX_FNAME); if (loadedTexture) { static DWORD msgHash_RemoveTexture = CHashString(_T("RemoveTexture")).GetUniqueID(); TEXTUREOBJECTPARAMS top; top.Name = &hashName; top.TextureObjectInterface = m_pTextureObject; m_ToolBox->SendMessage(msgHash_RemoveTexture, sizeof(TEXTUREOBJECTPARAMS), &top); } m_DisplayName.ReleaseBuffer(); // made it this far so add to program list of objects //SINGLETONINSTANCE(CTextureEditor)->GetTextureDataList()->push_back(m_TextureObject); //OBJECTPAGEINFO objPageInfo; //objPageInfo.name = &m_DisplayName; //objPageInfo.thumbNail = &m_ThumbNail; //objPageInfo.pageIndex = SINGLETONINSTANCE(CTextureEditor)->m_PageIndex; //objPageInfo.rsrcIndex = m_ObjectIndex; //objPageInfo.object = m_TextureObject; //static DWORD msgHash_AddObjectMessage = CHashString(_T("AddObjectMessage")).GetUniqueID(); //m_ToolBox->SendMessage(msgHash_AddObjectMessage, sizeof(OBJECTPAGEINFO), &objPageInfo); return TRUE; }