<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Eigene SetDayState-Funktion für Monatskalender bitte Ausprobieren]]></title><description><![CDATA[<p>Hi,<br />
Da ich einen Montaskalender brauche wo ich Tage unterschiedlich Colorieren kann, habe ich mir ne eigene Funktion dafür gebaut, die soweit auch (zumindest bei mir WinXP SP2) funzt. Wollte Sie euch mal zeigen und Fragen ob das auf anderen System (Bitte System mitposten!) auch funktioniert oder ob ihr noch etwas verbessern würdet an der Funktion? Also bitte Probiert die Funktion mal aus! Danke.</p>
<pre><code>// hwnd - Handle des Monatskalender
void MyCalendar::SetDayState(HWND hwnd, int day, COLORREF colour)
{
	MCHITTESTINFO hittest;
	RECT rc;
	POINT p;
	int diff = 0;

	// Hier kommt noch ne genauere Abfrage :)
	if(day &lt; 1 || day &gt; 31)
		return;

	ZeroMemory(&amp;hittest, sizeof(MCHITTESTINFO));
	hittest.cbSize = sizeof(MCHITTESTINFO);

	// 13 und 52 sind die Koords für die erste Zeile erste Spalte
	// DayHeight sind die Pixel für eine Zeile.
	// DayWitdh  sind die Pixel für eine Spalte.

	// Den Tag der 2. Zeile und ersten Spalte herausbekommen.
	// Erst ab der 2. Zeile kann man sich sicher sein das es der Richtige Monat ist!
	// In der ersten Zeile sind noch die Tage vom Vormonat.
	p.x = 13;
	p.y = 52 + DayHeight;
	hittest.pt = p;
	MonthCal_HitTest(hwnd, &amp;hittest);
	// In hittest.st.wDay ist nun der Tag der 2. Zeile und ersten Spalte	

	// Wieder den &quot;Cursor&quot; auf die 2. Zeile und ersten Spalte setzten
	rc.left		= 17;
	rc.top		= 52 + DayHeight;

	// kleine Berechnung wo man nun hin muss in der &quot;Matrix&quot;
	// Also eine Zeile hat immer 7 Spalten deshalb immer im &quot;siebener Rhythmus&quot; überprüfen
	diff = day - hittest.st.wDay;
	if( diff &lt; 0 ) {
		diff += 7;
		rc.left	+= DayWitdh * diff;
		rc.top	-= DayHeight;
	}
	else if( diff &lt; 7 )
		rc.left	+= DayWitdh * diff;
	else if( diff &lt; 14 ) {
		diff -= 7;
		rc.left	+= DayWitdh * diff;
		rc.top	+= DayHeight;
	} else if( diff &lt; 21 ) {
		diff -= 14;
		rc.left	+= DayWitdh * diff;
		rc.top	+= DayHeight * 2;
	}else if( diff &lt; 28 ) {
		diff -= 21;
		rc.left	+= DayWitdh * diff;
		rc.top	+= DayHeight * 3;
	}else {
		diff -= 28;
		rc.left	+= DayWitdh * diff;
		rc.top	+= DayHeight * 4;
	}

	HDC hdc = GetDC(hwnd);
	SetBkColor(hdc, colour);
	char buff[5];
	sprintf(buff, &quot;%2.0d&quot;, day);
	TextOut(hdc, rc.left, rc.top, buff, strlen(buff));
	ReleaseDC(hwnd, hdc);
}
</code></pre>
<p>Hoffe habe sie einigermaßen erklärt.</p>
<p>MfG schirrmie</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171217/eigene-setdaystate-funktion-für-monatskalender-bitte-ausprobieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 08:42:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171217.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Jan 2007 15:23:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigene SetDayState-Funktion für Monatskalender bitte Ausprobieren on Tue, 23 Jan 2007 15:28:52 GMT]]></title><description><![CDATA[<p>Hi,<br />
Da ich einen Montaskalender brauche wo ich Tage unterschiedlich Colorieren kann, habe ich mir ne eigene Funktion dafür gebaut, die soweit auch (zumindest bei mir WinXP SP2) funzt. Wollte Sie euch mal zeigen und Fragen ob das auf anderen System (Bitte System mitposten!) auch funktioniert oder ob ihr noch etwas verbessern würdet an der Funktion? Also bitte Probiert die Funktion mal aus! Danke.</p>
<pre><code>// hwnd - Handle des Monatskalender
void MyCalendar::SetDayState(HWND hwnd, int day, COLORREF colour)
{
	MCHITTESTINFO hittest;
	RECT rc;
	POINT p;
	int diff = 0;

	// Hier kommt noch ne genauere Abfrage :)
	if(day &lt; 1 || day &gt; 31)
		return;

	ZeroMemory(&amp;hittest, sizeof(MCHITTESTINFO));
	hittest.cbSize = sizeof(MCHITTESTINFO);

	// 13 und 52 sind die Koords für die erste Zeile erste Spalte
	// DayHeight sind die Pixel für eine Zeile.
	// DayWitdh  sind die Pixel für eine Spalte.

	// Den Tag der 2. Zeile und ersten Spalte herausbekommen.
	// Erst ab der 2. Zeile kann man sich sicher sein das es der Richtige Monat ist!
	// In der ersten Zeile sind noch die Tage vom Vormonat.
	p.x = 13;
	p.y = 52 + DayHeight;
	hittest.pt = p;
	MonthCal_HitTest(hwnd, &amp;hittest);
	// In hittest.st.wDay ist nun der Tag der 2. Zeile und ersten Spalte	

	// Wieder den &quot;Cursor&quot; auf die 2. Zeile und ersten Spalte setzten
	rc.left		= 17;
	rc.top		= 52 + DayHeight;

	// kleine Berechnung wo man nun hin muss in der &quot;Matrix&quot;
	// Also eine Zeile hat immer 7 Spalten deshalb immer im &quot;siebener Rhythmus&quot; überprüfen
	diff = day - hittest.st.wDay;
	if( diff &lt; 0 ) {
		diff += 7;
		rc.left	+= DayWitdh * diff;
		rc.top	-= DayHeight;
	}
	else if( diff &lt; 7 )
		rc.left	+= DayWitdh * diff;
	else if( diff &lt; 14 ) {
		diff -= 7;
		rc.left	+= DayWitdh * diff;
		rc.top	+= DayHeight;
	} else if( diff &lt; 21 ) {
		diff -= 14;
		rc.left	+= DayWitdh * diff;
		rc.top	+= DayHeight * 2;
	}else if( diff &lt; 28 ) {
		diff -= 21;
		rc.left	+= DayWitdh * diff;
		rc.top	+= DayHeight * 3;
	}else {
		diff -= 28;
		rc.left	+= DayWitdh * diff;
		rc.top	+= DayHeight * 4;
	}

	HDC hdc = GetDC(hwnd);
	SetBkColor(hdc, colour);
	char buff[5];
	sprintf(buff, &quot;%2.0d&quot;, day);
	TextOut(hdc, rc.left, rc.top, buff, strlen(buff));
	ReleaseDC(hwnd, hdc);
}
</code></pre>
<p>Hoffe habe sie einigermaßen erklärt.</p>
<p>MfG schirrmie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215322</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Tue, 23 Jan 2007 15:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene SetDayState-Funktion für Monatskalender bitte Ausprobieren on Tue, 23 Jan 2007 16:25:09 GMT]]></title><description><![CDATA[<p>Solltest Du nicht die ürsprüngliche Farbe des DC's, den Du ermittelst (<em>GetDC</em>), wieder herstellen (wegen sauberen Clean-Up) ?! Gibt zwar keine Leaks aber besser ist besser <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> .</p>
<p>PS:</p>
<p>schirrmie schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void MyCalendar::SetDayState(HWND hwnd, int day, COLORREF colour)
</code></pre>
</blockquote>
<p>Glaube das 'MyCalendar::' ist (jetzt) überflüssig, oder <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215377</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Tue, 23 Jan 2007 16:25:09 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene SetDayState-Funktion für Monatskalender bitte Ausprobieren on Tue, 23 Jan 2007 18:15:15 GMT]]></title><description><![CDATA[<p>Das mit der Farbe werd ich noch machen<br />
Und ja die Klasse hab ich vergessen rauszulöschen hier beim Post. Normalerweise hab ich natürlich auch nicht das man das Handle übergeben muss das hat ja die Klasse aber das ja nebensächlich jetzt. Hast die Funktion denn mal ausprobiert ob das mit den Pixel alles hinkommt und so also ob die auch funktioniert soweit?</p>
<p>MfG schirrmie</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1215447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1215447</guid><dc:creator><![CDATA[schirrmie]]></dc:creator><pubDate>Tue, 23 Jan 2007 18:15:15 GMT</pubDate></item></channel></rss>