<?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[MFCGridCtrl]]></title><description><![CDATA[<p>Hallo,<br />
hat schon jemand von euch mit dem Grid was gemacht ?<br />
<a href="http://www.codeproject.com/miscctrl/gridctrl.asp#CCellRange" rel="nofollow">http://www.codeproject.com/miscctrl/gridctrl.asp#CCellRange</a><br />
Mein Problem:<br />
Ich selektiere in dem Gried mehrere Spalten ( funktioniert ) und will von allen die selektioniert sind den Text abfangen ( das kann ich nicht )</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/59455/mfcgridctrl</link><generator>RSS for Node</generator><lastBuildDate>Wed, 03 Jun 2026 01:10:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/59455.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Dec 2003 10:11:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MFCGridCtrl on Tue, 23 Dec 2003 10:11:46 GMT]]></title><description><![CDATA[<p>Hallo,<br />
hat schon jemand von euch mit dem Grid was gemacht ?<br />
<a href="http://www.codeproject.com/miscctrl/gridctrl.asp#CCellRange" rel="nofollow">http://www.codeproject.com/miscctrl/gridctrl.asp#CCellRange</a><br />
Mein Problem:<br />
Ich selektiere in dem Gried mehrere Spalten ( funktioniert ) und will von allen die selektioniert sind den Text abfangen ( das kann ich nicht )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/421942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/421942</guid><dc:creator><![CDATA[007ski]]></dc:creator><pubDate>Tue, 23 Dec 2003 10:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Tue, 23 Dec 2003 11:31:14 GMT]]></title><description><![CDATA[<p>also, ich hab mit dieser klasse noch nicht gearbeitet, allerdings plane ich schon mit dieser klasse für mein projekt.</p>
<p>dieses problem sollte nach der dokumentation eigentlich doch kein problem sein.</p>
<p>ich hoffe ich hab das ganze jetzt richtig verstanden. du möchtest den inhalt der zellen aus einem ausgewählten bereich &quot;haben&quot;.</p>
<p>mit CCellRange bekommst du eine auswahl. diese auswahl ist doch eine einfache matrix. in zwei schleifen die matrix, zeile für zeile durchgehen und auf die einzelnen elemente zugreifen und den text abfragen.</p>
<p>also wenn du einen selektierten bereich hast, bekommst du die eckkoordinaten hiermit raus:</p>
<pre><code class="language-cpp">int GetMinRow() const;                      // Self explanatory
    void SetMinRow(int minRow);
    int GetMinCol() const;
    void SetMinCol(int minCol);
    int GetMaxRow() const;
    void SetMaxRow(int maxRow);
    int GetMaxCol() const;
    void SetMaxCol(int maxCol);
</code></pre>
<p>und ich hoffe man übersieht folgendes nicht: // Self explanatory <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
<p>weiter.</p>
<p>unter General cell information:</p>
<pre><code class="language-cpp">virtual CString GetItemText(int nRow, int nCol)
</code></pre>
<p>hoffe das reicht und klappt auch!</p>
<p>noch eine anmerkung. dieses projekt ist sehr gut dokumentiert. bitte einfach die seite ausdrucken und in ruhe durchlesen. wenn du danach noch fragen hast, sind sie bestimmt etwas anspruchsvoller.<br />
habe auch mal eine frage zu dem projekt gehabt, aber diese wieder vergessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/421990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/421990</guid><dc:creator><![CDATA[alex-t]]></dc:creator><pubDate>Tue, 23 Dec 2003 11:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Tue, 23 Dec 2003 11:55:13 GMT]]></title><description><![CDATA[<p>hmm.. ich glaube ich stehe auf dem schlauch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
also klar mit</p>
<pre><code class="language-cpp">CCellRange cr = m_grid.GetSelectedCellRange();	
int z = cr.GetMinRow();
int zz = cr.GetMaxRow();
</code></pre>
<p>kriege ich erste und letzte selectierte spalte , aber den rest ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422021</guid><dc:creator><![CDATA[007ski]]></dc:creator><pubDate>Tue, 23 Dec 2003 11:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Tue, 23 Dec 2003 12:30:41 GMT]]></title><description><![CDATA[<p>mathematik unterricht klasse 7. thema: geometrie.</p>
<p>wie kann man ein rechteck im koordinatensystem definieren?</p>
<p>1. einen punkt (X|Y) und die seitenlängen.</p>
<p>2. zwei punkte (X1|Y1) und (X2|Y2)</p>
<pre><code>(X1|Y1) für P

      P#######
      ########
      ########
      #######Q

             (X2|Y2) für Q
</code></pre>
<p>ich weiss ich schreibe manchmal zu ausschweifend. aber ich denke das bringts!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422044</guid><dc:creator><![CDATA[alex-t]]></dc:creator><pubDate>Tue, 23 Dec 2003 12:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Tue, 23 Dec 2003 12:44:48 GMT]]></title><description><![CDATA[<p>da ich nur bis Klass 6 Mathe gehabt habe .....<br />
also ich habe einen Grid</p>
<pre><code>Spalte1#######
Spalte2#######
Spalte3#######
Spalte4#######
Spalte5#######
Spalte6#######
</code></pre>
<p>angenomen ich wehle Spalte1 ; Spalte3 ; Spalte6<br />
mit die zwie Methoden kriege ich Spalte1 und Spalte6 , jetzt wie komme ich auf die Spalte3 und vor allem woher weiss ich ob sie überhaupt selektiert ist ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422058</guid><dc:creator><![CDATA[007ski]]></dc:creator><pubDate>Tue, 23 Dec 2003 12:44:48 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Tue, 23 Dec 2003 13:45:09 GMT]]></title><description><![CDATA[<p>du hast die grenzbereiche... alles dazwischen ist selectiert. nachhilfe in mathe gebe ich hier nicht. mach doch ne skizze und überleg selber!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422091</guid><dc:creator><![CDATA[alex-t]]></dc:creator><pubDate>Tue, 23 Dec 2003 13:45:09 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Tue, 23 Dec 2003 14:15:23 GMT]]></title><description><![CDATA[<p>alex-t schrieb:</p>
<blockquote>
<p>nachhilfe in mathe gebe ich hier nicht. mach doch ne skizze und überleg selber!</p>
</blockquote>
<p>also erlich gesagt was hat es mit mathe zu tun ??</p>
<p>alex-t schrieb:</p>
<blockquote>
<p>du hast die grenzbereiche... alles dazwischen ist selectiert.<br />
!</p>
</blockquote>
<p>eben nicht alles !<br />
sory aber ich kapiere es nicht Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/422111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422111</guid><dc:creator><![CDATA[007ski]]></dc:creator><pubDate>Tue, 23 Dec 2003 14:15:23 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Tue, 23 Dec 2003 16:42:46 GMT]]></title><description><![CDATA[<p>moment, entschuldige bitte... ich bin in den nächsten stunden etwas beschäftigt. danach poste ich dir mehr. glaube ich kanns dir dann in ruhe schreiben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422186</guid><dc:creator><![CDATA[alex-t]]></dc:creator><pubDate>Tue, 23 Dec 2003 16:42:46 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Wed, 24 Dec 2003 14:15:46 GMT]]></title><description><![CDATA[<p>alex-t schrieb:</p>
<blockquote>
<p>moment, entschuldige bitte... ich bin in den nächsten stunden etwas beschäftigt. danach poste ich dir mehr. glaube ich kanns dir dann in ruhe schreiben...</p>
</blockquote>
<p>ok ich warte und danke alex-t :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422614</guid><dc:creator><![CDATA[007ski]]></dc:creator><pubDate>Wed, 24 Dec 2003 14:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Thu, 25 Dec 2003 15:32:27 GMT]]></title><description><![CDATA[<p>*oki, tut mir leid, hatte etwas zu viel weihnachtsstress. wollte einer bekannten etwas gutes tun, und dem sohnemann zu weihnachten einen spiele rechner zusammenschrauben. hat aber erst nicht so richtig sein sollen. bei km ein k7s5a und ein barton bestellt. erst nach mehreren stunden harte testarbeit herausgefunden, woran es liegt. tja, bin halt nicht mehr so auf dem neuesten technik stand. ist aber auch egal. die nächste hardware wird sowieso ein ht p4 m sein, mit mindestens 4 ghz. und das erst wenn so ein system für unter 1,5 zu haben ist und natürlich mit 2 jahren garantie und von dell. also in etwa 2 jahren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>ach ja, und an alle die, die mich deshalb belächeln, dass meine freundin vor dem computer steht: egal wie viel erfolg man haben kann, ich würde alles dafür geben um mit meiner freundin zusammen zu sein. erfolg und geld ist wirklich nicht soo wichtig wie ein mensch mit dem man alles teilen kann.<br />
wünsche allen frohe weihnachten!!!<br />
*</p>
<p>so... zurück zum thema.</p>
<p>nun, ich habe mir alles nochmal angeschaut. und ich muss feststellen, dass es kein leichtes thema ist. aber da hätte ich grossmaul schon früher drauf kommen können.</p>
<p><em>eine kleine weissheit. wenn etwas schwierig erscheint, kann es manchmal mit 5 minuten überlegen und 1 minute tippen gelöst werden...<br />
wenn etwas leicht erscheint, kann es manchmal nach einer minute tippen zu einer katastrophe führen!!!</em></p>
<p>meine überlegungen:<br />
1. kam kann ja nicht nur normale mehrfachauswahlen treffen, sondern auch &quot;wilde&quot; mehrfachauswahlen. z.b. mit gedrückter ctrl taste mehrere nicht benachbarte zellen anklicken. diese sind dann ebenfalls in einer gewissen auswahl, die sich allerdings nicht ohne weiteres überprüfen lässt. zumindest habe ich noch keine methode entdeckt, wie man an einer liste dieser auswahl rankommt. die möglichkeiten die ich gefunden habe folgen weiter unten.<br />
2. man kann auch mehrere zeilen UND/ODER spalten &quot;wild&quot; auswählen. ebenfalls mit gedrückter ctrl taste. dies führt zu einem grossen problem bei der methode die ich mir zunächst ausgedacht habe.<br />
3. sagen wir du hast ein grid mit einer statischen elementen anzahl... dann kann ich dir weiterhelfen. ansonsten kann ich dich nur noch mehr verwirren.</p>
<p>ich fange einfach mal an.</p>
<p>für meine ausführung rate ich dir das demo projekt zu laden und auch gleich mal zu starten. achja, und den mfc 7 bug fix nicht vergessen. falls der compiler an zwei stellen mit (int) meckert, abändern in (UINT).</p>
<p>let's go:</p>
<p>wenn du eine auswahl startest, egal ob mehrfach oder einzeln, tritt das ereignis:</p>
<pre><code class="language-cpp">ON_NOTIFY(GVN_SELCHANGING, IDC_GRID, OnGridStartSelChange)
</code></pre>
<p>ein, und wenn du deine auswahl beendest heisst es:</p>
<pre><code class="language-cpp">ON_NOTIFY(GVN_SELCHANGED, IDC_GRID, OnGridEndSelChange)
</code></pre>
<p>für den simpelsten fall, dass man benachbarte zellen ausgewählt hat, ist dies das bereits ausreichend um dich weiterzubringen. denn du kannst beim ersten ereignis eine ecke deines ausgewählten rechtecks festhalten und beim beenden des auswahl kommt die diagonal gegenüber liegende ecke des rechtecks. zeilen und spalten nummer bekommst du ja mit:</p>
<pre><code class="language-cpp">NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;
    Trace(_T(&quot;row %d, col %d (%d Selected)\n&quot;), pItem-&gt;iRow, pItem-&gt;iColumn, m_Grid.GetSelectedCount());
</code></pre>
<p>raus.</p>
<p>wie schon erwähnt erschwert die möglichkeit der mehrfachauswahl mit hilfe der ctrl taste.</p>
<p>ich hatte gerade schon überlegungen angestellt wie man die funktion erweitert und speziell für die ctrl auswahl eine lösung findet. allerdings ist die sache nicht gerade einfach. es gibt sicherlich eine lösung, die aber nicht sehr schön ausschaut.</p>
<p>die überlegung wäre: eine datenstruktur zum festhalten der gesamten auswahl. z.b. eine liste vom typ CCellID. und wenn eine auswahl beendet wird werden die elmente dort hinzugefügt.<br />
hört sich einfach an. ist es aber nicht, denn wie so oft stellt sich die frage, neu ausgewählt oder hinzugefügt? das erste ersetzt die liste mit der aktuellen auswahl, das zweite fügt zur aktuellen auswahl die neue hinzu.</p>
<p>die problematik beschränkt sich allerdings auf die kombination von mehrfachauswahlen. wenn man einzelauswahlen mit hilfe der ctrl taste zusammenfügt, also immer nur eine zelle anklickt, um diese zur auswahl hinzuzufügen, dann kann ich dir sicher weiterhelfen. leider haben die 5 minuten nachdenken nicht ausgereicht um eine lösung für ein problem zu finden. das da wäre: mit hilfe der ctrl taste kann man mehrfach auswahlen kombinieren.<br />
es ergeben sich, so wie ich das bis jetzt sehe, zwei grosse probleme:<br />
1. einzelne zellen können mehrfach in der liste auftauchen. lässt sich mit einer suchfunktion vermeiden. zu lasten der performance!<br />
2. eine oder mehrere kombinierte mehrfachauswahlen wurden bereits getroffen. die ctrl taste wird losgelassen und es wird eine neue mehrfachauswahl getroffen, die grösser ist, als die gesamte alte auswahl. nach meinem verfahren wird diese dann nicht als neue auswahl angesehen, sondern als erweiterte auswahl der alten auswahl. kompliziert aber leider wahr. bin noch am überlegen, wie man dieses problem lösen könnte.</p>
<p>ach ja, noch etwas. kann kann mit hilfe der ctrl taste eine auswahl auch zum teil aufheben.</p>
<pre><code>123456789
1nnnnnnnn
2nAAAAAAn
3nAAAAAAn
4nnAAAAnn
5nnAAAAnn
6nAAAAAnn
7nAAAAAnn
8nnnnnnnn
9nnnnnnnn

A = ausgewählte zelle
</code></pre>
<p>bei gedrückter ctrl taste auf (5|5) klicken und aus A wird n!<br />
theoretisch könnte man jetzt die liste nach der bereits vorhandenen zelle durchsuchen und diese dann auch entfernen.<br />
gerade noch mal vergewissert. mein verfahren würde das nicht als neue auswahl ansehen. mit ein paar zeilen mehr code könnte man hier ein akzeptables workaround bereitstellen.</p>
<p>aber wie bereits gesagt, die kombination von mehrfachauswahlen macht mir zu schaffen. werde mal eine nacht drüber schlafen. muss jetzt aber erst mal meine sqlite klasse weiterschreiben. hoffe konnte dich wenigstens ein wenig weiterbringen.</p>
<p>tut mir leid, hab so laut gerufen, dass ich selbst nicht bemerkt habe, wie kompliziert die sache ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422760</guid><dc:creator><![CDATA[alex-t]]></dc:creator><pubDate>Thu, 25 Dec 2003 15:32:27 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Thu, 25 Dec 2003 07:43:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//Ums jetzt mal zu vereinfachen

CCellRange m_range = m_Grid.GetSelectedCellRange();

for (int i = m_range.GetMinCol(); i &lt;= m_range.GetMaxCol();i++)
{
     for (int x = m_range.GetMinRow(); x &lt;= m_range.GetMaxRow();x++)
     {
         if(m_Grid.IsCellSelected(x,i))
	   Trace(_T(&quot;Is selected Row %d Col %d\n&quot;),x,i);
     }
}
</code></pre>
<p>Erklärung<br />
GetSelectedCellRange gibt min und max der Selectierten zurück<br />
Dadurch braucht man nicht alle durchzugehen.<br />
Jetzt beginnen bei COLMIN von ROWMIN bis ROWMAX durchgehen und checken ob Selected bis COLMAX</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422801</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Thu, 25 Dec 2003 07:43:05 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Thu, 25 Dec 2003 10:55:08 GMT]]></title><description><![CDATA[<p>das ist auch die lösung, die ich am anfang angesprochen habe. allerding hatte ich da in gedanken den worst case durchgespielt. man selektiere 1,1 und 1.000,1.000. 1.000.000 abfragen, ob eine zelle ausgewählt ist oder nicht.</p>
<p>möchte diese klasse selbst benutzen und arbeite meine erwähnte lösung weiter aus.</p>
<p>falls interesse besteht poste ich diese hier demnächst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422835</guid><dc:creator><![CDATA[alex-t]]></dc:creator><pubDate>Thu, 25 Dec 2003 10:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Thu, 25 Dec 2003 13:17:24 GMT]]></title><description><![CDATA[<p>Du kannst ja in die Klasse eine Liste einbauen und bei jedem OnCHANGE in der Liste speichern oder löschen.<br />
Es ist aber unwahrscheinlich da man 1,1 und 1000,1000 selektiert.<br />
Insbesonders da dies sowieso viel speicher braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422894</guid><dc:creator><![CDATA[Unix-Tom]]></dc:creator><pubDate>Thu, 25 Dec 2003 13:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Thu, 25 Dec 2003 15:21:44 GMT]]></title><description><![CDATA[<p>hm, da hast du allerdings recht...</p>
<p>na ich werde mir mal etwas gedanken zum worst case machen und den normalfall durchrechnen... ist eine meiner lieblingsaufgaben. und bei dem ganzen kuchenessen kann ich das als entschuldigung verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/422961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/422961</guid><dc:creator><![CDATA[alex-t]]></dc:creator><pubDate>Thu, 25 Dec 2003 15:21:44 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Fri, 26 Dec 2003 12:57:58 GMT]]></title><description><![CDATA[<p>Uf.... und ich dachte schon das ich so duff bin.<br />
Vielen dank für die Antworten werde ich ausprobieren<br />
Alex-t falls du die klasse erweiterst dann wurde ich mich freuen wenn du es mir schickst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /><br />
Also freue weinachten erst mal und guten rutsch<br />
:xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/423385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/423385</guid><dc:creator><![CDATA[007ski]]></dc:creator><pubDate>Fri, 26 Dec 2003 12:57:58 GMT</pubDate></item><item><title><![CDATA[Reply to MFCGridCtrl on Fri, 26 Dec 2003 13:05:09 GMT]]></title><description><![CDATA[<p>das werde ich wohl spasseshalber tun, und dann auch im forum von codeproject posten, damit die anderen entwickler sich das mal anschauen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/423390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/423390</guid><dc:creator><![CDATA[alex-t]]></dc:creator><pubDate>Fri, 26 Dec 2003 13:05:09 GMT</pubDate></item></channel></rss>