home *** CD-ROM | disk | FTP | other *** search
/ Prima Shareware 3 / DuCom_Prima-Shareware-3_cd1.bin / PROGRAMO / C / CKTBL / SAMPLES / MFCDEMO / MFCDEVW.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-09  |  10.1 KB  |  387 lines

  1. // mfcdevw.cpp : implementation of the CMfcdemoView class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "mfcdemo.h"
  6.  
  7. #include "mfcdedoc.h"
  8. #include "mfcdevw.h" 
  9.                
  10. #include "demotbl.h"
  11. #include "demoopt.h"  
  12. #include "celltype.h"
  13. #include "scrolldi.h"
  14. #include "labeldia.h" 
  15. #include "actiondi.h"
  16. #include "insertro.h"
  17. #include "viewopti.h"   
  18. #include "resource.h"
  19.  
  20. #ifdef _DEBUG
  21. #undef THIS_FILE
  22. static char BASED_CODE THIS_FILE[] = __FILE__;
  23. #endif
  24.  
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CMfcdemoView
  27.  
  28. IMPLEMENT_DYNCREATE(CMfcdemoView, CView)
  29.  
  30. BEGIN_MESSAGE_MAP(CMfcdemoView, CView)
  31.     //{{AFX_MSG_MAP(CMfcdemoView)
  32.     ON_WM_CREATE()
  33.     ON_WM_SIZE()
  34.     ON_COMMAND(ID_TOOLS_OPTIONS_ACTIONS, OnToolsOptionsActions)
  35.     ON_COMMAND(ID_TOOLS_OPTIONS_LABELS, OnToolsOptionsLabels)
  36.     ON_COMMAND(ID_TOOLS_OPTIONS_SCROLLING, OnToolsOptionsScrolling)
  37.     ON_COMMAND(ID_TOOLS_OPTIONS_SIZE, OnToolsOptionsSize)
  38.     ON_COMMAND(ID_FORMAT_CELLS_TYPE, OnFormatCellsType)
  39.     ON_COMMAND(ID_INSERT_COLUMNS, OnInsertColumns)
  40.     ON_COMMAND(ID_INSERT_ROWS, OnInsertRows)
  41.     ON_COMMAND(ID_FORMAT_BACKGROUNDCOLOR, OnFormatBackgroundcolor)
  42.     ON_COMMAND(ID_FORMAT_FOREGORUNDCOLOR, OnFormatForegorundcolor)
  43.     ON_COMMAND(ID_FORMAT_FONT, OnFormatFont)
  44.     ON_COMMAND(ID_TOOLS_OPTIONS_VIEW, OnToolsOptionsView)
  45.     ON_COMMAND(ID_EDIT_DELETECOLUMNS, OnEditDeletecolumns)
  46.     ON_COMMAND(ID_EDIT_DELETEROWS, OnEditDeleterows)
  47.     //}}AFX_MSG_MAP
  48.     // Standard printing commands
  49.     ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  50.     ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  51. END_MESSAGE_MAP()
  52.  
  53. /////////////////////////////////////////////////////////////////////////////
  54. // CMfcdemoView construction/destruction
  55.  
  56. CMfcdemoView::CMfcdemoView()
  57. {
  58.     // TODO: add construction code here
  59.     
  60.     cktbl = new    CDemoTableControl;           
  61. }
  62.  
  63. CMfcdemoView::~CMfcdemoView()
  64. {     
  65.     delete cktbl;         
  66. }
  67.          
  68. /////////////////////////////////////////////////////////////////////////////
  69. // CMfcdemoView archive    
  70.  
  71. void CMfcdemoView::SerializeRaw(CArchive& ar)
  72. {
  73.     ASSERT_VALID(this);  
  74.     ASSERT_VALID(cktbl);
  75.     cktbl->SerializeRaw(ar);   
  76.     ASSERT_VALID(this);
  77. }
  78.          
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CMfcdemoView drawing
  81.  
  82. void CMfcdemoView::OnDraw(CDC* pDC)
  83. {
  84.     CMfcdemoDoc* pDoc = GetDocument();
  85.     ASSERT_VALID(pDoc);
  86.  
  87.     // TODO: add draw code for native data here
  88. }
  89.  
  90. /////////////////////////////////////////////////////////////////////////////
  91. // CMfcdemoView printing
  92.                       
  93. void CMfcdemoView::OnPrint( CDC* pDC, CPrintInfo* pInfo )
  94. {                                 
  95.     // use CKTBL printing routine
  96.     cktbl->SetMargins( pDC, pInfo );          // Sets margins in pInfo
  97.      cktbl->OnPrint( pDC, pInfo );           // Prints page specified in pInfo
  98. }
  99.             
  100.         
  101. BOOL CMfcdemoView::OnPreparePrinting(CPrintInfo* pInfo)
  102. {
  103.     // default preparation
  104.     return DoPreparePrinting(pInfo);
  105. }
  106.  
  107. void CMfcdemoView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
  108. {
  109.     // TODO: add extra initialization before printing 
  110.     
  111.     CView::OnBeginPrinting( pDC, pInfo );          
  112.     cktbl->OnBeginPrinting( pDC, pInfo );    // Initializes pInfo
  113.     cktbl->SetMargins( pDC, pInfo );        // Sets margins in pInfo
  114.     cktbl->Paginate( pDC, pInfo );            // Paginates into pInfo
  115. }
  116.  
  117. void CMfcdemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  118. {
  119.     // TODO: add cleanup after printing
  120. }
  121.     
  122.                     
  123. /////////////////////////////////////////////////////////////////////////////
  124. // CMfcdemoView diagnostics
  125.  
  126. #ifdef _DEBUG
  127. void CMfcdemoView::AssertValid() const
  128. {
  129.     CView::AssertValid();
  130. }
  131.  
  132. void CMfcdemoView::Dump(CDumpContext& dc) const
  133. {
  134.     CView::Dump(dc);
  135. }
  136.  
  137. CMfcdemoDoc* CMfcdemoView::GetDocument() // non-debug version is inline
  138. {
  139.     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMfcdemoDoc)));
  140.     return (CMfcdemoDoc*)m_pDocument;
  141. }
  142. #endif //_DEBUG
  143.  
  144. /////////////////////////////////////////////////////////////////////////////
  145. // CMfcdemoView message handlers
  146.  
  147. int CMfcdemoView::OnCreate(LPCREATESTRUCT lpCreateStruct)
  148. {              
  149.     RECT rect;
  150.     if (CView::OnCreate(lpCreateStruct) == -1)
  151.         return -1;
  152.     
  153.     // TODO: Add your specialized creation code here
  154.     
  155.     //GetClientRect(&rect);
  156.     SetRect( &rect, 0,0,0,0 );
  157.     if (!cktbl->Create( WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL, rect, this )) 
  158.         return -1; 
  159.             
  160.     cktbl->SetSize( 32, 32 );    
  161.     cktbl->SetFlags( CKTBL_DEFAULT_FLAGS|CKTBL_HSCROLL_STOP|CKTBL_VSCROLL_STOP );
  162.     return 0;
  163. }
  164.  
  165. void CMfcdemoView::OnSize(UINT nType, int cx, int cy)
  166. {
  167.     CView::OnSize(nType, cx, cy);
  168.     
  169.     // TODO: Add your message handler code here
  170.     cktbl->MoveWindow( 0, 0, cx, cy, TRUE);
  171. }
  172.   
  173.  
  174. void CMfcdemoView::OnToolsOptionsActions()
  175. {
  176.     // TODO: Add your command handler code here
  177.  
  178.     CActionDialog dialog;  
  179.     dialog.InitializeFrom(cktbl);
  180.     dialog.DoModal();    
  181. }
  182.  
  183. void CMfcdemoView::OnToolsOptionsLabels()
  184. {
  185.     // TODO: Add your command handler code here
  186.      
  187.     CLabelDialog dialog;
  188.     dialog.InitializeFrom(cktbl);
  189.     dialog.DoModal();
  190. }
  191.  
  192. void CMfcdemoView::OnToolsOptionsScrolling()
  193. {
  194.     // TODO: Add your command handler code here
  195.     
  196.     CScrollDialog dialog;
  197.     dialog.InitializeFrom(cktbl);
  198.     dialog.DoModal();
  199. }
  200.  
  201. void CMfcdemoView::OnToolsOptionsSize()
  202. {
  203.     // TODO: Add your command handler code here  
  204.     
  205.     CDemoOptionsDialog dialog;
  206.     dialog.InitializeFrom(cktbl);
  207.     dialog.DoModal();
  208.  
  209. }       
  210.  
  211. void CMfcdemoView::OnToolsOptionsView()
  212. {
  213.     // TODO: Add your command handler code here
  214.     CViewOptionsDialog dialog;
  215.     dialog.InitializeFrom(cktbl);
  216.     dialog.DoModal();
  217. }
  218.  
  219. void CMfcdemoView::OnFormatCellsType()
  220. {
  221.     // TODO: Add your command handler code here  
  222.     
  223.     CCellTypeDialog dialog;     
  224.     dialog.InitializeFrom( cktbl );    
  225.     dialog.DoModal();
  226. }
  227.  
  228. void CMfcdemoView::OnInsertColumns()
  229. {
  230.     // TODO: Add your command handler code here
  231.     CInsertRowColDialog dialog;
  232.     dialog.InsertColumnsDialog();
  233.     dialog.InitializeFrom( cktbl );    
  234.     dialog.DoModal();
  235. }
  236.  
  237. void CMfcdemoView::OnInsertRows()
  238. {
  239.     // TODO: Add your command handler code here
  240.     CInsertRowColDialog dialog;  
  241.     dialog.InsertRowsDialog();
  242.     dialog.InitializeFrom( cktbl );    
  243.     dialog.DoModal();
  244. }
  245.  
  246. void CMfcdemoView::OnFormatBackgroundcolor()
  247. {
  248.     // TODO: Add your command handler code here
  249.     CKTBL_ATTRIB attrib;
  250.     
  251.     cktbl->GetAttr( cktbl->GetCurrentRow(), cktbl->GetCurrentColumn(), &attrib );
  252.     
  253.     CColorDialog dialog(attrib.backColor);
  254.     if(dialog.DoModal()==IDOK) {    
  255.         attrib.backColor = dialog.GetColor();
  256.         cktbl->ModifySelAttr( &attrib, CKTBL_ATTR_BACKCOLOR, 0 );
  257.     }
  258.  
  259. }
  260.  
  261. void CMfcdemoView::OnFormatForegorundcolor()
  262. {
  263.     // TODO: Add your command handler code here
  264.     CKTBL_ATTRIB attrib;
  265.  
  266.     cktbl->GetAttr( cktbl->GetCurrentRow(), cktbl->GetCurrentColumn(), &attrib ); 
  267.     
  268.     CColorDialog dialog( attrib.foreColor);
  269.     if(dialog.DoModal()==IDOK) {    
  270.         attrib.foreColor = dialog.GetColor();
  271.         cktbl->ModifySelAttr( &attrib, CKTBL_ATTR_FORECOLOR, 0 );
  272.     }
  273. }
  274.  
  275. void CMfcdemoView::OnFormatFont()
  276. {
  277.     // TODO: Add your command handler code here
  278.     LOGFONT        lf;
  279.     CWindowDC    dummyDC(0);  
  280.     int            logpixelSY;    
  281.     CKTBL_ATTRIB attrib;
  282.         
  283.     // get defaults from current cell
  284.  
  285.     cktbl->GetAttr( cktbl->GetCurrentRow(), cktbl->GetCurrentColumn(), &attrib ); 
  286.     
  287.     // fill logfont with current font
  288.     // size is cumbersome beacause LOGFONT does not have the size in points
  289.  
  290.       memset(&lf, 0, sizeof(LOGFONT));
  291.  
  292.     logpixelSY = dummyDC.GetDeviceCaps( LOGPIXELSY );
  293.     lf.lfHeight = - (int)((long)attrib.fontSize * logpixelSY / 720 );
  294.     lf.lfWidth  = 0;
  295.  
  296.     // rest is easy
  297.     
  298.     strncpy( lf.lfFaceName, attrib.fontName, LF_FACESIZE );
  299.     lf.lfWeight = (attrib.fontBold)?FW_BOLD:FW_NORMAL;         // why not a boolean ? :-)
  300.     lf.lfItalic = attrib.fontItalic;                        // why not an angle ? :-)
  301.     lf.lfUnderline = attrib.fontUnderline;
  302.     lf.lfStrikeOut = attrib.fontStrikeOut;
  303.     lf.lfOutPrecision    = OUT_DEFAULT_PRECIS;
  304.     lf.lfClipPrecision     = CLIP_DEFAULT_PRECIS;
  305.     lf.lfQuality         = PROOF_QUALITY;
  306.     lf.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
  307.     
  308.     // do dialog
  309.     CFontDialog dialog( &lf );  
  310.     dialog.m_cf.rgbColors = attrib.foreColor;
  311.     if(dialog.DoModal()==IDOK) { 
  312.         CHOOSEFONT     *lpCF = &dialog.m_cf;
  313.         LOGFONT     *lpLF = dialog.m_cf.lpLogFont;
  314.  
  315.         // modify attribute
  316.     
  317.         attrib.fontName = lpLF->lfFaceName;
  318.         attrib.fontSize = lpCF->iPointSize;              // logfont does not have the size in points
  319.         attrib.fontBold = lpLF->lfWeight==FW_BOLD;
  320.         attrib.fontItalic = lpLF->lfItalic;
  321.         attrib.fontUnderline = lpLF->lfUnderline;
  322.         attrib.fontStrikeOut = lpLF->lfStrikeOut;
  323.         attrib.foreColor = lpCF->rgbColors;
  324.  
  325.         cktbl->EndEdit( TRUE );
  326.         cktbl->ModifySelAttr( &attrib, CKTBL_ATTR_FONT|CKTBL_ATTR_FORECOLOR, 0 );
  327.         
  328.         // make sure font fits in cells           
  329.         cktbl->UpdateSelectionRowHeighths();
  330.     }    
  331.            
  332. }
  333.                       
  334.  
  335. void CMfcdemoView::OnEditDeletecolumns()
  336. {
  337.     // TODO: Add your command handler code here
  338.     CRect rect;  
  339.     
  340.     if(cktbl->GetSelectionSize()==0) {
  341.         CString msg,title;
  342.         msg.LoadString(IDS_NOSELECTION);
  343.         title.LoadString(AFX_IDS_APP_TITLE);
  344.         MessageBox( msg, title, MB_ICONINFORMATION|MB_OK);
  345.         return;
  346.     }   
  347.     
  348.     if(cktbl->GetSelectionSize()>1) {
  349.         CString msg,title;
  350.         msg.LoadString(IDS_NOMULTIPLESEL);
  351.         title.LoadString(AFX_IDS_APP_TITLE);
  352.         MessageBox( msg, title, MB_ICONINFORMATION|MB_OK);
  353.         return;
  354.     }  
  355.     
  356.     cktbl->GetSelection(&rect, 1);
  357.     cktbl->RemoveColumns( max(rect.left,1), min(rect.right,cktbl->GetColumns()) );  
  358.     if(cktbl->GetColumns()==0) cktbl->SetColumns(1);
  359.  
  360. }
  361.  
  362. void CMfcdemoView::OnEditDeleterows()
  363. {
  364.     // TODO: Add your command handler code here
  365.     CRect rect;  
  366.     
  367.     if(cktbl->GetSelectionSize()==0) {
  368.         CString msg,title;
  369.         msg.LoadString(IDS_NOSELECTION);
  370.         title.LoadString(AFX_IDS_APP_TITLE);
  371.         MessageBox( msg, title, MB_ICONINFORMATION|MB_OK);
  372.         return;
  373.     }   
  374.     
  375.     if(cktbl->GetSelectionSize()>1) {
  376.         CString msg,title;
  377.         msg.LoadString(IDS_NOMULTIPLESEL);
  378.         title.LoadString(AFX_IDS_APP_TITLE);
  379.         MessageBox( msg, title, MB_ICONINFORMATION|MB_OK);
  380.         return;
  381.     }   
  382.     
  383.     cktbl->GetSelection(&rect, 1);
  384.     cktbl->RemoveRows( max(rect.top,1), min(rect.bottom,cktbl->GetRows()) );
  385.     if(cktbl->GetRows()==0) cktbl->SetRows(1);
  386. }
  387.