<?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 Klasse für eigenen Button - und die WndProc?]]></title><description><![CDATA[<h2>Hallo.<br />
Da ich ja n bisschen rumexperimentiere mit nem eigenen kontextmenü<br />
bin ich bisher so weit, dass ich n Fenster mit eigener Form per Regions mit nem Bitmap geblittet habe.<br />
Bald soll das transparent werden, aber dazu später...</h2>
<h2>Erst mal hierzu:<br />
Ich nehme bisher Rectangles oder Polygons, mal sie auf das BMP , das alles in der WM_PAINT.<br />
In der WM_MOUSEMOVE kläre ich , ob sich die MOUSE im Rechteck befindet, wenn ja, wird es neu gezeichnet, in Grau, wenn nicht wieder in weiss.</h2>
<p>Das gleiche in der WM_LBUTTONDOWN, nur das daraufhin execl ausgeführt wird.<br />
Zu mindest habe ich das so vor.<br />
Da bin ich gestern auf die brauchbare Idee gekommen, für diese Buttons ne Klasse zu bauen, da der User ja so viele Quicklaunch-Knöpfe in das Fenster einfügen können soll, wie er will, gesteuert per Dialog.<br />
-&gt; zu dieser Klasse.<br />
- Sie ist mit einem Konstruktor ausgestattet, der alles notwendige für das<br />
Zeichnen übernimmt, also Kontext holen, Paintstruct klären, Koordinaten<br />
klären,zeichnen.<br />
- sie hat ebenfalls eine Methode, die sich um das hovern kümmert<br />
- es gibt ebenfalls noch eine Methode, die sich um den Klick kümmert.</p>
<p>Ungefähr so</p>
<pre><code>class hoverrect (HWND phan, int l, int t, int r, int b)
{
	private:
		static COLORREF bgn = RGB(250, 250, 250);
           	static COLORREF bgh = RGB(120,120,120);
           public:
		int hoverrect(HWND phan, int l, int t, int r, int b);
		int hovering(noch nichts getan);
		int klick(noch nichts getan)
		~hoverrect(); 

};

int hoverrect::hoverrect(HWND phan,int l, int t, int r, int b)
(
   HDC hdevcon;
   PAINTSTRUCT ps;
   hdevcon =  BeginPaint(phan,&amp;ps);
                  Rectangle(phan,l,t,r,b);
    EndPaint(phan&amp;ps);  
)
</code></pre>
<p>Dies sei erst mal ein Vorgeschmack.<br />
Ich möchte nun dieses Objekt erzeugen..<br />
Zb so:</p>
<pre><code>hoverrect r1( winhan, 20,20,40,40);
</code></pre>
<p>Nur wo?<br />
Anhand des Konstruktors sieht man, dass ich es in der WM_PAINT erzeugen kann......<br />
Was mir dann lediglich das zeichnen implementiert.<br />
In jeder anderen Nachricht wäre es genauso blöd, da das Objekt erst erzeugt werden würde, wenn jene Nachricht eingeht.<br />
Also, der Konstruktor zeichnet es,die hovering-Methode soll auf WM_MOUSEMOVE ausgeführt werden, die Klick-Methode auf WM_LBUTTONDOWN.<br />
-&gt;<br />
Und genau das lässt mich grübeln.<br />
Muss ich einfach funktionsglobal in der WndProc das Objekt erzeugen, in dem ich<br />
per scope-operator in der jeweiligen WM das tue, was die Methode soll,<br />
ODER, und damit eleganter, kann ich das Abfangen der einzelnen WM_’s, die NUR für dieses Objekt gedacht sind, direkt in die Klasse kapseln?<br />
Da bin ich mir nicht ganz sicher..... würde gerne der Klasse auch die Kontroller der einzelnen WM’S mitgeben....., quasi ein Objekt, das alles schnallt, mit dem Zweck, den User später so viele Buttons in das Menü einfügen zu können, wie er will.<br />
Weiss nur nicht, ob diese Klasse dann die einzige wäre und alles andere, was ich in der WndProc für jede Nachricht täte, einfach keine Bedeutung hätte.....<br />
Hoffe, jemand versteht diesen Sachverhalt..........<br />
Danke für jeden Tipp dazu.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179964/eigene-klasse-für-eigenen-button-und-die-wndproc</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 11:13:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179964.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Apr 2007 07:49:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigene Klasse für eigenen Button - und die WndProc? on Fri, 27 Apr 2007 07:49:15 GMT]]></title><description><![CDATA[<h2>Hallo.<br />
Da ich ja n bisschen rumexperimentiere mit nem eigenen kontextmenü<br />
bin ich bisher so weit, dass ich n Fenster mit eigener Form per Regions mit nem Bitmap geblittet habe.<br />
Bald soll das transparent werden, aber dazu später...</h2>
<h2>Erst mal hierzu:<br />
Ich nehme bisher Rectangles oder Polygons, mal sie auf das BMP , das alles in der WM_PAINT.<br />
In der WM_MOUSEMOVE kläre ich , ob sich die MOUSE im Rechteck befindet, wenn ja, wird es neu gezeichnet, in Grau, wenn nicht wieder in weiss.</h2>
<p>Das gleiche in der WM_LBUTTONDOWN, nur das daraufhin execl ausgeführt wird.<br />
Zu mindest habe ich das so vor.<br />
Da bin ich gestern auf die brauchbare Idee gekommen, für diese Buttons ne Klasse zu bauen, da der User ja so viele Quicklaunch-Knöpfe in das Fenster einfügen können soll, wie er will, gesteuert per Dialog.<br />
-&gt; zu dieser Klasse.<br />
- Sie ist mit einem Konstruktor ausgestattet, der alles notwendige für das<br />
Zeichnen übernimmt, also Kontext holen, Paintstruct klären, Koordinaten<br />
klären,zeichnen.<br />
- sie hat ebenfalls eine Methode, die sich um das hovern kümmert<br />
- es gibt ebenfalls noch eine Methode, die sich um den Klick kümmert.</p>
<p>Ungefähr so</p>
<pre><code>class hoverrect (HWND phan, int l, int t, int r, int b)
{
	private:
		static COLORREF bgn = RGB(250, 250, 250);
           	static COLORREF bgh = RGB(120,120,120);
           public:
		int hoverrect(HWND phan, int l, int t, int r, int b);
		int hovering(noch nichts getan);
		int klick(noch nichts getan)
		~hoverrect(); 

};

int hoverrect::hoverrect(HWND phan,int l, int t, int r, int b)
(
   HDC hdevcon;
   PAINTSTRUCT ps;
   hdevcon =  BeginPaint(phan,&amp;ps);
                  Rectangle(phan,l,t,r,b);
    EndPaint(phan&amp;ps);  
)
</code></pre>
<p>Dies sei erst mal ein Vorgeschmack.<br />
Ich möchte nun dieses Objekt erzeugen..<br />
Zb so:</p>
<pre><code>hoverrect r1( winhan, 20,20,40,40);
</code></pre>
<p>Nur wo?<br />
Anhand des Konstruktors sieht man, dass ich es in der WM_PAINT erzeugen kann......<br />
Was mir dann lediglich das zeichnen implementiert.<br />
In jeder anderen Nachricht wäre es genauso blöd, da das Objekt erst erzeugt werden würde, wenn jene Nachricht eingeht.<br />
Also, der Konstruktor zeichnet es,die hovering-Methode soll auf WM_MOUSEMOVE ausgeführt werden, die Klick-Methode auf WM_LBUTTONDOWN.<br />
-&gt;<br />
Und genau das lässt mich grübeln.<br />
Muss ich einfach funktionsglobal in der WndProc das Objekt erzeugen, in dem ich<br />
per scope-operator in der jeweiligen WM das tue, was die Methode soll,<br />
ODER, und damit eleganter, kann ich das Abfangen der einzelnen WM_’s, die NUR für dieses Objekt gedacht sind, direkt in die Klasse kapseln?<br />
Da bin ich mir nicht ganz sicher..... würde gerne der Klasse auch die Kontroller der einzelnen WM’S mitgeben....., quasi ein Objekt, das alles schnallt, mit dem Zweck, den User später so viele Buttons in das Menü einfügen zu können, wie er will.<br />
Weiss nur nicht, ob diese Klasse dann die einzige wäre und alles andere, was ich in der WndProc für jede Nachricht täte, einfach keine Bedeutung hätte.....<br />
Hoffe, jemand versteht diesen Sachverhalt..........<br />
Danke für jeden Tipp dazu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274375</guid><dc:creator><![CDATA[me-S-on]]></dc:creator><pubDate>Fri, 27 Apr 2007 07:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klasse für eigenen Button - und die WndProc? on Fri, 27 Apr 2007 11:19:39 GMT]]></title><description><![CDATA[<p>Ist Dir eigentlich klar, dass nur in WM_PAINT gezeichnet wird.<br />
Wenn eine Interaktion ein Neuzeichnen benötigt wird wird nur das Fenster invalidiert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274509</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 27 Apr 2007 11:19:39 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klasse für eigenen Button - und die WndProc? on Fri, 27 Apr 2007 11:35:03 GMT]]></title><description><![CDATA[<h2>bisher sah es nämlich nicht so aus, als ob es NUR in der WM_PAINT geschieht.<br />
Also, wenn ich sagen wir mal, auf WM_LMOUSEBUTTON n rect zeichne, dann wird es doch auch direkt gezeichnet, mit GetDC und so weiter.<br />
Die einzige Nachricht, die mir strikt das zeichnen verweigert, ist die WM_CREATE, zu mindest bisher.<br />
Das, was in der WM_PAINT gezeichnet wird, ist meines rechtens aber resident, d.h., wenn ich ein Rechteck auf WM_LMOUSEBUTTON zeichne, dann bleibt es nicht auf dem Buldschirm, beim Maxi-mimimieren und verschieben.<br />
Also , auch wenn Du dir da so sicher bist, sieht es für mich bisher nicht vollständig danach aus, deine Aussage bejahen zu können.</h2>
<p>Das ist ja auch nicht meine Frage.<br />
Meiner Frage bezog sich eher darauf, ob ich in mein Objekt irgenwie die einzelnen wichtigen WM_ scanmethoden implementieren kann, oder ob ich die Methoden innerhalb der WndProc mit . einfach aufrufen muss.<br />
So ungefähr:</p>
<pre><code>case WM_MOUSEMOVE:
{
    r1.hovering();
break;
}
</code></pre>
<p>Würde dies gerne umgehen, in dem ich dem Objekt selber die Möglichkeit gebe, WM's ebenfalls abzufangen, und nur diejenigen zu bearbeiten, die spezifischen Bedingungen entsprechen, normalerweise macht man es so bei Subclassing mit Childwindows, wenn man zB. ein Edit feld-Verhalten individuell ändern will.<br />
----Aber ob das auch mit dem Rect geht, bzw einer Region?<br />
Mein Objekt kennt ja nicht die WndProc, bräuchte also mindestens ein GetWindowLong-Aufruf um die zu bekommen, und dann gegebenenfalls zu subclassen.<br />
Aber mein Objekt ist dahingehend kein fenster, sondern nur ein Rechteck.<br />
Das war eigentlich mein Anliegen.<br />
Danke bisher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274524</guid><dc:creator><![CDATA[me-S-on]]></dc:creator><pubDate>Fri, 27 Apr 2007 11:35:03 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klasse für eigenen Button - und die WndProc? on Fri, 27 Apr 2007 13:13:53 GMT]]></title><description><![CDATA[<p>Zeichen geschieht grundsätzlich nur in WM_PAINT! Versuch gar nicht erst anderes!</p>
<p>Was nicht heißt das ein Nachrichten-Handler Invalidate und UpdateWindow in einem Rutsch ausführt. Dann wird auch innerhalb solch eines Handlers neu gezeichnet!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274619</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 27 Apr 2007 13:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klasse für eigenen Button - und die WndProc? on Fri, 27 Apr 2007 20:33:40 GMT]]></title><description><![CDATA[<p>wohl, damit es gezeichnet bleibt, in irgendeiner Message eine SendMessage senden?<br />
Aber DU weist , wie ich das meine, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274863</guid><dc:creator><![CDATA[me-S-on]]></dc:creator><pubDate>Fri, 27 Apr 2007 20:33:40 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klasse für eigenen Button - und die WndProc? on Sat, 28 Apr 2007 06:29:07 GMT]]></title><description><![CDATA[<p>Ich schreibe es Dir jetzt zum dritten mal. Um ein Fenster neu zu zeichnen ruft man Invalidate auf! Wenn das Fenster auch sofort aktualisiert werden soll sofort danach UpdateWindow!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1274945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274945</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 28 Apr 2007 06:29:07 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Klasse für eigenen Button - und die WndProc? on Sat, 28 Apr 2007 09:49:10 GMT]]></title><description><![CDATA[<p>Ich danke dir nun auch zum dritten mal, nur gehts Du nicht darauf ein, was ich hier schilder.<br />
Aber mal was anderes: Versuchte n Dialog auf dein Rectangle-Klick zu legen, der auch aufgerufen wird.<br />
Nur habe ich weder ne Caption , noch reagiert innerhalb des Dialoges irgendetwas.<br />
Weder Schliessen Kreuz noch die Entertaste in einer Editbox und das automatische<br />
Scrollbalken hinzufügen schonmal gar nicht.<br />
Nehme ich aber CreateDialog dafür, so rafft er wenigstens die Entertaste als Linefeed im Edit.<br />
Sonst wie oben bei DialogBox.<br />
Allerdngs denk ich, ich habe alles richtig gemacht.<br />
Hier mal die codefrragmente, einfach zum obigen Code &quot;dazudenken&quot;<br />
:</p>
<pre><code>// in der main.cpp
#include &quot;qlp_dlgproc.h&quot;
...
...
case WM_LBUTTONDOWN:
    {
      if(PtInRegion(h3rgn,psxy.x, psxy.y) != 0)
      {            
        DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(ID_DLG_CONF),mwinhan,(DLGPROC)DlgProc);
      }
--------------------&gt;

//die qlp_dlgproc.h-------------------------------------------------------------------------------------------

LRESULT CALLBACK DlgProc(HWND hdlg, UINT hdlgc, WPARAM dlgm_Wflags,LPARAM dlgm_Lflags)
{
  switch(hdlgc)
  {
        case WM_COMMAND:
        {
            switch(LOWORD(dlgm_Wflags))
            {

            return 0;
            }

        break;        
        }

        case WM_DESTROY:
        {
            PostQuitMessage(0);
        return 0;
        }
  return 0;
  }

return DefWindowProc(hdlg,hdlgc,dlgm_Wflags,dlgm_Lflags);
}

// .rc-------------------------------------------------------------------------------------------
#include&lt;windows.h&gt;
#include &quot;flip.h&quot;
// the blitmap------------------------------------------------------------------
IDI_BMP                BITMAP         &quot;Skin1.bmp&quot;
//______________________________________________________________________________
// the config-dialog------------------------------------------------------------
ID_DLG_CONF DIALOG   40,40,180,120
    STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU    
    CAPTION &quot;Quicklaunch&quot;
    FONT 8, &quot;MS Sans Serif&quot;
    BEGIN
         EDITTEXT ID_DLG_EDIT1,      10,10,80,100,ES_AUTOVSCROLL |
                                                   ES_AUTOHSCROLL |
                                                   ES_MULTILINE
         LISTBOX ID_DLG_LS1,      120,10,55,100  
         PUSHBUTTON             &quot; &gt; &quot;,ID_DLG_ADD,95,20,15,10
         PUSHBUTTON             &quot; &lt; &quot;,ID_DLG_REM,95,50,15,10
         PUSHBUTTON             &quot;&lt;&lt;&quot;, ID_DLG_REMA,95,80,15,10                                                           

END

//______________________________________________________________________________
</code></pre>
<p>Wäre dankbar für jeden Tipp.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1275031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1275031</guid><dc:creator><![CDATA[me-S-on]]></dc:creator><pubDate>Sat, 28 Apr 2007 09:49:10 GMT</pubDate></item></channel></rss>