Month Calendar
-
HI
Also hab folgendes Problem....
Bin auf diesem Gebiet noch nich ganz so bewandert! Ich würde gernen in einen Month Calendar bestimmte Tage fettgedruckt haben!
Hab gesehn das das man das mit setdaystate oder getdaystate machen kann wäre aber für eine kleine hilfestellung sehr dankbar
danke schonmal...
-
Beispiel von MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cmonthcalctrl.3a3a.setdaystate.asp
-
Mhmm...
Ja das hatte ich auch gefunden aber könntest du das vieleicht kurz erleutern...?
Weil ich habs irgendwie so wies da steht aber es passiert nichts!Er macht keine Fehlermeldung oder so aber macht auch nicht die Tage Dick!
In welchen Jahr fängt der denn Standartmäßig an also das Jahr das er sich in dem Beispiel holt!?
-
Letztendlich ist das, was Du brauchst die Methode SetDayState.
Als ersten Parameter übergibst Du die Anzahl der Tage (in dem foldenden Array).
Als zweiten übergibst Du einen Array von MONTHDAYSTATE.
Jedes Element in dem Array entspricht der Darstellung (fett oder nicht).
Wenn ein Tag fett sein soll wird das entsprechende Bit gesetzt!// Zeiger auf das Control // kann wegfallen, wenn Du eine Membervariable dafür hast CMonthCalCtrl* pCtrl = (CMonthCalCtrl*) GetDlgItem(IDC_MONTHCALENDAR1); // hol die sichtbaren Tage SYSTEMTIME timeFrom; SYSTEMTIME timeUntil; int nCount = pCtrl->GetMonthRange(&timeFrom, &timeUntil, GMR_DAYSTATE); // Array für die sichtbaren Tage LPMONTHDAYSTATE pDayState; pDayState = new MONTHDAYSTATE[nCount]; memset(pDayState, 0, sizeof(MONTHDAYSTATE) * nCount); //sichtbaren Monat bestimmen int nIndex = (timeFrom.wDay == 1) ? 0 : 1; // hier werden die Bits gesetzt. gesetztes Bit heißt der Tag wird fett dargestellt pDayState[nIndex] |= 1 << 3; // 4th day pDayState[nIndex] |= 1 << 18; // 19th day pDayState[nIndex] |= 1 << 25; // 25th day // Zuweisen der Darstellung pCtrl->SetDayState(nCount, pDayState)
Einigermaßen verständlich?
Sonst zeig mal Deinen Code her, evtl. hast Du ja irgendwo einen Fehler...
-
Nunja da ich das erstmal ausprobieren wollte sieht mein code nich viel anders aus als der den du nochmal beschrieben hast!
Danke schonmal dafür hat mir aus jedenfall etwas zum verständniss beigetragen aber irgendwas muss ich doch bestimmt noch machen...void CKalenderDlg::KalenderDaten() { CMonthCalCtrl* pCtrl = (CMonthCalCtrl*) GetDlgItem(IDC_Kalender); // Set color pCtrl->SetColor(MCSC_TITLETEXT, ::GetSysColor(COLOR_INACTIVECAPTIONTEXT)); pCtrl->SetColor(MCSC_TITLEBK, ::GetSysColor(COLOR_INACTIVECAPTION)); pCtrl->SetColor(MCSC_MONTHBK , ::GetSysColor(COLOR_INACTIVECAPTION)); pCtrl->SetColor(MCSC_BACKGROUND, ::GetSysColor(COLOR_INACTIVECAPTION)); SYSTEMTIME timeFrom; SYSTEMTIME timeUntil; int nCount = pCtrl->GetMonthRange(&timeFrom, &timeUntil, GMR_DAYSTATE); LPMONTHDAYSTATE pDayState; pDayState = new MONTHDAYSTATE[nCount]; memset(pDayState, 0, sizeof(MONTHDAYSTATE) * nCount); int nIndex = (timeFrom.wDay == 1) ? 0 : 1; pDayState[nIndex] |= 1 << 3; // 4th day pDayState[nIndex] |= 1 << 18; // 19th day pDayState[nIndex] |= 1 << 25; // 25th day pCtrl->SetDayState(nCount, pDayState); }
-
Denke das liegt daran, dass Du den Vorgang im Konstruktor Deines Dialogs machst.
Du solltest es in OnInitDialog versuchen oder in eine Methode packen und die Methode von OnInitDialog aufrufen.
Dann sollte es gehen.
-
shice, hab mich versehen, ist ja gar nicht der Konstruktor -.-
-
Mhmm naja falls dir nochwas einfällt kannste es ja mal bitte schreiben!
Bin erst dienstag wieder da!!
Dasnke schonmal... schönes Wochenende!!!