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