1 //Prak3 MFC ohne Assistenten

  2 //Author: Steve Moser

  3 //Email: smoser@anno74.de

  4 //Datum: 4.11.2003

  5 
  6 
  7 
  8 //***********************************************************************

  9 // kritzel.cpp: Definition der Implementierung der Klassen

 10 //***********************************************************************

 11 #define OEMRESOURCE

 12 
 13 #include <afxwin.h> // Globale Header-Datei

 14 #include "MyDoc.h"

 15 #include "MyView.h"

 16 #include "resource.h"

 17 #include "kritzel.h"

 18 
 19 
 20 CMyApp myApp;
 21 BEGIN_MESSAGE_MAP(CMyApp,CWinApp)
 22 ON_COMMAND (IDM_FILE_EXIT,CWinApp::OnAppExit)
 23 END_MESSAGE_MAP ()
 24 
 25 // CMyApp member functions

 26 BOOL CMyApp::InitInstance ()
 27 {
 28     SetRegistryKey("Kritzel by Steve Moser");
 29     LoadStdProfileSettings(0);
 30 
 31     CSingleDocTemplate* pDocTemplate;
 32     pDocTemplate = new CSingleDocTemplate(
 33                        IDR_HAUPTMENUE,
 34                        RUNTIME_CLASS ( CMyDoc ),
 35                        RUNTIME_CLASS ( CHauptFenster ),
 36                        RUNTIME_CLASS ( CMyView ) );
 37     AddDocTemplate(pDocTemplate);
 38 
 39     RegisterShellFileTypes(TRUE);
 40     //Parse CommandLine

 41     CCommandLineInfo cmdInfo;
 42     ParseCommandLine(cmdInfo);
 43 

 45     if(!ProcessShellCommand (cmdInfo) )
 46         return FALSE;
 47 
 48     return TRUE;
 49 }
 50 
 51 
 52 
 53 IMPLEMENT_DYNCREATE(CHauptFenster,CFrameWnd)
 54 //************************************************************************

 55 // CMainWindow message map and member functions

 56 BEGIN_MESSAGE_MAP (CHauptFenster, CFrameWnd)  // klasse, fuer die die messagemap ist und die klasse, von der sie abgeleitet ist

 57 
 58 ON_WM_CREATE ()        //nachricht wird erzeugt nachdem das fenster kreirt wurde, aber noch nicht sichtbar ist

 59 ON_WM_MEASUREITEM ()  //wird ein oberpunkt eines menues aufgerufen, wird diese nachricht erzeugt

 60 ON_WM_DRAWITEM ()     //wird in das untermenue gewechselt, wird über diese funktion das menue gezeichnet

 61 
 62 END_MESSAGE_MAP ()
 63 
 64 
 65 //*************************************************************************************

 66 //Function: OnCreate ()

 67 //Return value: int

 68 //description: erzeugt eine view und verbindet diese mit dem hauptfenster

 69 //*************************************************************************************

 70 int CHauptFenster :: OnCreate (LPCREATESTRUCT lpcs)
 71 {
 72     if (CFrameWnd::OnCreate(lpcs) ==-1)// aufruf der basisklassenfunktion zuerst

 73         return -1;
 74 
 75     CMenu* pMenu = GetMenu();
 76     for(int i=0;i<8;i++)
 77     {
 78         pMenu->ModifyMenu(IDM_FARBE_SCHWARZ+i,MF_BYCOMMAND | MF_OWNERDRAW, IDM_FARBE_SCHWARZ+i);
 79     }
 80 
 81     return 0;
 82 }
 83 
 84 
 85 //*************************************************************************************

 86 //Function: OnMeasureItem()

 87 //Return value: void

 88 //description: legt die dimension fest eines menueeintrages fest

 89 //*************************************************************************************

 90 void CHauptFenster :: OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpmis)
 91 {
 92     lpmis->itemWidth= ::GetSystemMetrics(SM_CYMENU)*4;
 93     lpmis->itemHeight= ::GetSystemMetrics(SM_CYMENU);
 94 }
 95 
 96 //*************************************************************************************

 97 //Function: OnDrawItem ()

 98 //Return value: void

 99 //description: zeichnet das untermenue und setzt den auswahlhacken bei den entsprechenden werten

100 //*************************************************************************************

101 void CHauptFenster :: OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpdis)
102 {
103 
104     BITMAP bm;
105     CBitmap bitmap;
106     bitmap.LoadOEMBitmap(OBM_CHECK);
107     bitmap.GetObject(sizeof(bm),&bm);
108 
109     CDC dc;
110     dc.Attach(lpdis->hDC);
111     CBrush* pBrush = new CBrush(::GetSysColor((lpdis->itemState & ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_MENU));
112     dc.FrameRect(&(lpdis->rcItem),pBrush);
113     delete pBrush;
114 
115     if(lpdis->itemState & ODS_CHECKED)
116     {
117         CDC dcMem;
118         dcMem.CreateCompatibleDC(&dc);
119         CBitmap* pOldBitmap = dcMem.SelectObject(&bitmap);
120 
121         dc.BitBlt(lpdis->rcItem.left+4,lpdis->rcItem.top + (((lpdis->rcItem.bottom - lpdis->rcItem.top)-bm.bmHeight)/2),bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
122         dcMem.SelectObject(pOldBitmap);
123     }
124 
125 
126     pBrush = new CBrush(CMyDoc::crColors[lpdis->itemID - IDM_FARBE_SCHWARZ]);
127 
128     CRect rect = lpdis->rcItem;
129     rect.DeflateRect(6,4);
130     rect.left+= bm.bmWidth;
131     dc.FillRect(rect,pBrush);
132     delete pBrush;
133     dc.Detach();
134 
135 }
136 


syntax highlighted by Code2HTML, v. 0.9.1