<?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[API - Button]]></title><description><![CDATA[<p>Moin @ all</p>
<p>Ich habe ein Problem mit einem API - Programm. Ich habe hier ein Programm geschrieben das wenn es sich Startet und der Anwender mit der Maus in das Fenster Klickt einen Text an der Stelle ausgibt.</p>
<p>Ich würde jetzt gerne in das Fenster in dem der Text ausgegeben wird eine Schaltfläche einrichten. Doch genau hier ist das Problem: wie mache ich das? In der MFC gibt es eine Klasse &quot;CButton&quot; - die kann ich hier aber nicht verwenden. bzw wenn ich sie verwende hab ich schwierigkeiten einen Zeiger auf CWnd auf das Eltern-Fenster zu bekommen - HWND kann nicht ind CWnd portiert werden, und This - funktioniert auch nicht.</p>
<pre><code>#include &lt;windows.h&gt;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hRrevInstance,             LPSTR lpCmdLine, int nCmdShow)
{
   WNDCLASS MyCl;
   MSG Message;
   HWND hWindow;

   memset(&amp;MyCl,0,sizeof(MyCl));

   MyCl.style= CS_HREDRAW | CS_VREDRAW;
   MyCl.lpfnWndProc=WndProc;
   MyCl.hInstance=hInstance;
   MyCl.hbrBackground=(HBRUSH) (COLOR_WINDOW+1/20);
   MyCl.hCursor=LoadCursor(NULL, IDC_ARROW);
   MyCl.lpszClassName=&quot;Name&quot;;

   if(!RegisterClass(&amp;MyCl))
      return (FALSE);

   hWindow=CreateWindow(&quot;Name&quot;,&quot;Titel&quot;, WS_OVERLAPPEDWINDOW,                   10,10,400,300,NULL,NULL, hInstance, NULL);

   ShowWindow(hWindow, nCmdShow);
   UpdateWindow(hWindow);

   while(GetMessage(&amp;Message, NULL,0,0))
   {
      TranslateMessage(&amp;Message);
      DispatchMessage(&amp;Message);
   }

   return (Message.wParam);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uiMessage,WPARAM wParam,              LPARAM lParam)
{

   char Hallo[30] = &quot;Hallo!&quot;;
   HDC dc;

   switch(uiMessage)
   {
   case WM_LBUTTONDOWN: dc = GetDC(hWnd);
      TextOut(dc, LOWORD(lParam), HIWORD(lParam) ,Hallo, strlen           (Hallo));

      ReleaseDC(hWnd,dc);

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

   default: return DefWindowProc(hWnd, uiMessage, wParam, lParam);
   }
}
</code></pre>
<p>Wäre toll wenn da jemand wüsste wie ich einen Button einbaun kann und mir vieleicht den Completten-Code zurück postet...</p>
<p>Vielen Dank dafür Schon mal,..</p>
<p>MFG Granny</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155448/api-button</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 19:10:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155448.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Aug 2006 13:36:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 13:36:29 GMT]]></title><description><![CDATA[<p>Moin @ all</p>
<p>Ich habe ein Problem mit einem API - Programm. Ich habe hier ein Programm geschrieben das wenn es sich Startet und der Anwender mit der Maus in das Fenster Klickt einen Text an der Stelle ausgibt.</p>
<p>Ich würde jetzt gerne in das Fenster in dem der Text ausgegeben wird eine Schaltfläche einrichten. Doch genau hier ist das Problem: wie mache ich das? In der MFC gibt es eine Klasse &quot;CButton&quot; - die kann ich hier aber nicht verwenden. bzw wenn ich sie verwende hab ich schwierigkeiten einen Zeiger auf CWnd auf das Eltern-Fenster zu bekommen - HWND kann nicht ind CWnd portiert werden, und This - funktioniert auch nicht.</p>
<pre><code>#include &lt;windows.h&gt;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hRrevInstance,             LPSTR lpCmdLine, int nCmdShow)
{
   WNDCLASS MyCl;
   MSG Message;
   HWND hWindow;

   memset(&amp;MyCl,0,sizeof(MyCl));

   MyCl.style= CS_HREDRAW | CS_VREDRAW;
   MyCl.lpfnWndProc=WndProc;
   MyCl.hInstance=hInstance;
   MyCl.hbrBackground=(HBRUSH) (COLOR_WINDOW+1/20);
   MyCl.hCursor=LoadCursor(NULL, IDC_ARROW);
   MyCl.lpszClassName=&quot;Name&quot;;

   if(!RegisterClass(&amp;MyCl))
      return (FALSE);

   hWindow=CreateWindow(&quot;Name&quot;,&quot;Titel&quot;, WS_OVERLAPPEDWINDOW,                   10,10,400,300,NULL,NULL, hInstance, NULL);

   ShowWindow(hWindow, nCmdShow);
   UpdateWindow(hWindow);

   while(GetMessage(&amp;Message, NULL,0,0))
   {
      TranslateMessage(&amp;Message);
      DispatchMessage(&amp;Message);
   }

   return (Message.wParam);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uiMessage,WPARAM wParam,              LPARAM lParam)
{

   char Hallo[30] = &quot;Hallo!&quot;;
   HDC dc;

   switch(uiMessage)
   {
   case WM_LBUTTONDOWN: dc = GetDC(hWnd);
      TextOut(dc, LOWORD(lParam), HIWORD(lParam) ,Hallo, strlen           (Hallo));

      ReleaseDC(hWnd,dc);

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

   default: return DefWindowProc(hWnd, uiMessage, wParam, lParam);
   }
}
</code></pre>
<p>Wäre toll wenn da jemand wüsste wie ich einen Button einbaun kann und mir vieleicht den Completten-Code zurück postet...</p>
<p>Vielen Dank dafür Schon mal,..</p>
<p>MFG Granny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111546</guid><dc:creator><![CDATA[Grandmother]]></dc:creator><pubDate>Sun, 06 Aug 2006 13:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 13:42:37 GMT]]></title><description><![CDATA[<p>1. was da CWnd-&gt;hwnd angeht CWnd::m_hWnd ist das Handle;</p>
<p>und du musst glaub ein Fenster erzeugen mit CreateWindow(&quot;BUTTON&quot;,...). aber ich hab das noch nie gemacht, sry</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111550</guid><dc:creator><![CDATA[ESS_CB]]></dc:creator><pubDate>Sun, 06 Aug 2006 13:42:37 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 16:40:07 GMT]]></title><description><![CDATA[<p>Hi,<br />
Du brauchst n Msg-Handler für WM_CREATE, da erstellst du den Button mit CreateWindow(Ex)</p>
<pre><code class="language-cpp">case WM_CREATE:
    hbtnOk = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT(&quot;BUTTON&quot;), TEXT(&quot;Text des Buttons&quot;),
                            WS_CHILD | WS_VISIBLE, 100, 100, 100, 20, hWndParent, NULL,
                            ((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL);
    // hbtnOk ist vom Typ HWND und sollte statisch sein!
    // Weiteres...
    break; // bzw. return (0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1111696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111696</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 06 Aug 2006 16:40:07 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 16:41:38 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12101">@ESS_CB</a>:</p>
<p>ESS_CB schrieb:</p>
<blockquote>
<p>1. was da CWnd-&gt;hwnd angeht CWnd::m_hWnd ist das Handle;</p>
<p>und du musst glaub ein Fenster erzeugen mit CreateWindow(&quot;BUTTON&quot;,...). aber ich hab das noch nie gemacht, sry</p>
</blockquote>
<p>Ich glaube aber m_hWnd ist private!</p>
<p>nochmal @Grandmother:<br />
Du solltest dir mal ein WinAPI Tutorial anschauen <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/1111698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111698</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 06 Aug 2006 16:41:38 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 17:40:58 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>Ich glaube aber m_hWnd ist private!</p>
</blockquote>
<p>nö, public.</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111742</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 06 Aug 2006 17:40:58 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 22:12:43 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Schnellen Antworten ,- die Idee der CreateWindowEx Methode bei der Beantwortung der WM-CREATE Nachricht find ich klasse.</p>
<p>Eine weitere Frage:</p>
<p>Angenommen ich binde mithilfe dieser Methode einen Standart-Button in mein Programm ein, wie heißt dann meine Funktion die Aufgerufen wird um die WM_LBUTTONDOWN Nachricht für diesen Button zu Beantworten?</p>
<p>Im Klartext: Wie Beantworte ich bei solchen Standart-Buttons die Nachrichten? Welche Funktion muss ich aufsetzen?</p>
<p>---</p>
<p>Ich habe einen eigenen Button entwickelt --- (sieht ganz schön scheiße aus) --- aber damit kann ich Nachrichten beantworten denn mit dem Aufruf von</p>
<pre><code class="language-cpp">WNDCLASS B;
   B.lpfnWndProc=Funktion;
</code></pre>
<p>konnte ich eine Funktion festlegen die für dieses Steuerelement aufgerufen wird. In dieser Funktion hab ich dann einfach die WM_LBUTTONDOWN Nachricht abgefangen und beantwortet.</p>
<p>Wäre klasse wenn da jemand eine Lösung wüsste.</p>
<p>MFG Granny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111905</guid><dc:creator><![CDATA[Granny]]></dc:creator><pubDate>Sun, 06 Aug 2006 22:12:43 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 22:23:01 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich glaube aber m_hWnd ist private!</p>
</blockquote>
<p>Nein. Ist es nicht. Aber trotzdem sollte man die GetSafeHwnd Funktion nutzen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111910</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 06 Aug 2006 22:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 22:29:03 GMT]]></title><description><![CDATA[<p>Granny schrieb:</p>
<blockquote>
<p>Angenommen ich binde mithilfe dieser Methode einen stan****-Button in mein Programm ein, wie heißt dann<br />
meine Funktion die Aufgerufen wird um die WM_LBUTTONDOWN Nachricht für diesen Button zu Beantworten?<br />
MFG Granny</p>
</blockquote>
<p>Ich weiß zwar nicht warum du das machen willst, aber Buttons sind u.a. Std-Win-Controls, die haben ihre<br />
eigene fertige WndProc. Wenn du unbedingt an die WndProc dran musst, um die WM_LBUTTONDOWN-Nachricht<br />
abzufangen, musst du <a href="http://winapi.net/index.php?inhalt=s27" rel="nofollow"><strong>Subclassen</strong></a>.</p>
<p>Denke aber du meinst eher das Abfangen der eingehenden Befehle (sprich: jmd klickt auf den Button)...das<br />
geht mit WM_COMMAND in der WndProc deines Hauptfensters.<br />
In LOWORD von wParam steht dann die Button-ID zum identifizieren;<br />
BTW: Da fällt mir grade auf, die hab ich in meine Post vorhin vergessen, so isses richtig:</p>
<pre><code class="language-cpp">// irgend wo im globalen Scope:
#define BTN_OK 7000
// in der WndProc deines Haupfensters:
case WM_CREATE:
    hbtnOk = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT(&quot;BUTTON&quot;), TEXT(&quot;Text des Buttons&quot;),
                            WS_CHILD | WS_VISIBLE, 100, 100, 100, 20, hWndParent, reinterpret_cast&lt;HMENU&gt;(BTN_OK),
                            ((LPCREATESTRUCT)lParam)-&gt;hInstance, NULL);
    // hbtnOk ist vom Typ HWND und sollte statisch sein!
    // Weiteres...
    break; // bzw. return (0);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1111913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111913</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 06 Aug 2006 22:29:03 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Sun, 06 Aug 2006 22:30:46 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<blockquote>
<p>Ich glaube aber m_hWnd ist private!</p>
</blockquote>
<p>Nein. Ist es nicht. Aber trotzdem sollte man die GetSafeHwnd Funktion nutzen...</p>
</blockquote>
<p>Jaja, der MFC-Guru, ich habs nit mit MFC, aber wenn wir schon dabei sind...warum ist denn der Handle von GetSafeHwnd 'safe' ?</p>
<p>PS: Das hat mir Swordfish schon gesagt :p .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1111914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1111914</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 06 Aug 2006 22:30:46 GMT</pubDate></item><item><title><![CDATA[Reply to API - Button on Mon, 07 Aug 2006 11:27:08 GMT]]></title><description><![CDATA[<p>Vielen Dank - es funktioniert,..</p>
<p>MfG Granny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1112137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1112137</guid><dc:creator><![CDATA[Grandmother]]></dc:creator><pubDate>Mon, 07 Aug 2006 11:27:08 GMT</pubDate></item></channel></rss>