| 1 | // Wenn die Funktion Draw() folgendermaßen aussieht kann die RessourceException innerhalb ~ 25 Minuten provoziert werden
|
|---|
| 2 | // Es gibt dann eine Exception beim Erstellen der CPens
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 | unsigned long c = 0;
|
|---|
| 6 | for(;;) // TEST!!! ENDLOSSCHLEIFE!!!
|
|---|
| 7 | {
|
|---|
| 8 |
|
|---|
| 9 | TRACE(_T("Draw()-Durchlauf: %ld\n"), ++c);
|
|---|
| 10 | static bool first = true;
|
|---|
| 11 |
|
|---|
| 12 | CStdMemDC memDC(dc, m_staticRect);
|
|---|
| 13 |
|
|---|
| 14 | CPen linePen = CPen(PS_SOLID, 2, crdarkblue);
|
|---|
| 15 | CPen limitPen = CPen(PS_SOLID, 1, crdarkgreen);
|
|---|
| 16 | CPen gridPen = CPen(PS_SOLID, 1, crdarkgray);
|
|---|
| 17 | CPen fontPen = CPen(PS_SOLID, 1, crblack);
|
|---|
| 18 |
|
|---|
| 19 | LOGFONT lf;
|
|---|
| 20 |
|
|---|
| 21 | Compat_GetLogFont(&lf);
|
|---|
| 22 |
|
|---|
| 23 | lf.lfHeight = 14;
|
|---|
| 24 | lf.lfWeight = FW_NORMAL;
|
|---|
| 25 | #ifdef WINCE
|
|---|
| 26 | lf.lfWidth = 5;
|
|---|
| 27 | #endif
|
|---|
| 28 | CFont axisFontHori, axisFontVert;
|
|---|
| 29 | axisFontHori.CreateFontIndirect(&lf);
|
|---|
| 30 | lf.lfEscapement = 900;
|
|---|
| 31 | axisFontVert.CreateFontIndirect(&lf);
|
|---|
| 32 |
|
|---|
| 33 | GetClientRect(&m_staticRect);
|
|---|
| 34 |
|
|---|
| 35 | m_staticRectHeight = m_staticRect.bottom - m_staticRect.top;
|
|---|
| 36 | m_staticRectWidth = m_staticRect.right - m_staticRect.left;
|
|---|
| 37 |
|
|---|
| 38 | SetTrendRect();
|
|---|
| 39 |
|
|---|
| 40 | if (first)
|
|---|
| 41 | { // Hintergrund wird nur einmal gezeichnet und dann abgespeichert, damit er wieder geladen und angezeigt werden kann
|
|---|
| 42 | dc->FillSolidRect(&m_staticRect, crdlghinter);
|
|---|
| 43 |
|
|---|
| 44 | m_dc_oldPen = dc->SelectObject(&gridPen); // Alten Pen merken
|
|---|
| 45 |
|
|---|
| 46 | dc->SelectObject(&limitPen);
|
|---|
| 47 |
|
|---|
| 48 | dc->SelectObject(&fontPen);
|
|---|
| 49 |
|
|---|
| 50 | //dc->SelectObject(m_dc_oldPen); // Alten Pen zurückschreiben, sonst anscheinend MemoryLeak
|
|---|
| 51 |
|
|---|
| 52 | // Hintergrundbild speichern
|
|---|
| 53 | m_bkgrndCDC.CreateCompatibleDC(dc);
|
|---|
| 54 | m_bkgrndBitmap.CreateCompatibleBitmap(dc, m_staticRect.Width(), m_staticRect.Height());
|
|---|
| 55 | m_bkgrndCDC.SelectObject(m_bkgrndBitmap); // Kein Sichern von 'oldBitmap', da diese NULL ist
|
|---|
| 56 | m_bkgrndCDC.BitBlt(m_staticRect.left, m_staticRect.top, m_staticRect.Width(), m_staticRect.Height(), dc, m_staticRect.left, m_staticRect.top, SRCCOPY);
|
|---|
| 57 |
|
|---|
| 58 | first = false;
|
|---|
| 59 | }
|
|---|
| 60 |
|
|---|
| 61 | // Gespeichertes Hintergrundbild laden
|
|---|
| 62 | if (0 == memDC.BitBlt(m_staticRect.left, m_staticRect.top, m_staticRect.Width(), m_staticRect.Height(), &m_bkgrndCDC, m_staticRect.left, m_staticRect.top, SRCCOPY))
|
|---|
| 63 | {
|
|---|
| 64 | first = true;
|
|---|
| 65 | continue;
|
|---|
| 66 | }
|
|---|
| 67 |
|
|---|
| 68 | if (-1 != CDlgTrend::sm_comboBoxValueSel)
|
|---|
| 69 | { // Wenn in der ComboBox ein Wert zur Anzeige ausgewählt wurde
|
|---|
| 70 | }
|
|---|
| 71 | else //if (true == dtOk)
|
|---|
| 72 | { // Wert sichtbar, Daten vorhanden und Datentyp des gewählten Wertes ist für Anzeige geeignet
|
|---|
| 73 | m_memDC_oldFont = memDC.SelectObject(&axisFontVert); // Alte Font merken
|
|---|
| 74 | memDC.SetBkMode(TRANSPARENT);
|
|---|
| 75 |
|
|---|
| 76 | memDC.SelectObject(&axisFontHori); // Schrift für aktuellen Wert auswählen
|
|---|
| 77 | m_memDC_oldPen = memDC.SelectObject(&linePen); // Alten Pen merken
|
|---|
| 78 |
|
|---|
| 79 | memDC.SelectObject(&axisFontHori);
|
|---|
| 80 |
|
|---|
| 81 | memDC.SetBkMode(TRANSPARENT);
|
|---|
| 82 |
|
|---|
| 83 | //memDC.SelectObject(m_memDC_oldFont); // Alte Font zurückschreiben, sonst anscheinend MemoryLeak
|
|---|
| 84 | //memDC.SelectObject(m_memDC_oldPen); // Alten Pen zurückschreiben, sonst anscheinend MemoryLeak
|
|---|
| 85 | }
|
|---|
| 86 | }
|
|---|