<?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[VCL&#x2F;VXL ähnlicher Win32API Wrapper]]></title><description><![CDATA[<p>Hi,</p>
<p>ihr kennt doch sicherlich das Verfahren von Buttons in VCL. Buttons sind Instanzen, die ihre eigenen Nachrichten verarbeiten und nicht das Elternfenster.</p>
<p>Soetwas möchte ich gerne auch machen <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>Ich hatte mir das folgendermaßen gedacht: Eine Klasse namens &quot;button&quot; bekommt einen Funktionspointer auf eine Funktion die aufgerufen werden soll, wenn der Button gedrückt wird (Also WM_COMMAND an das Elternfenster gesendet wird).</p>
<p>Ich habe mit Subclassing meinen Button meine WndProc aufgetragen und das läuft auch Prima, WM_PAINT kommt an usw. leider jedoch nicht WM_COMMAND. <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="😞"
    /></p>
<p>Jetzt hab ich mir gedacht, wie ich das emulieren könnte: Alle möglichen Fensternachrichten abfangen und zusammenfügen, die dieses Ereignis auslösen könnten. Leider eine unzähmbare arbeit. <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="😞"
    /></p>
<p>Also bin ich zu extrem radikalen mitteln gegangen und habe im Elternfenster folgendes gemacht:</p>
<pre><code class="language-cpp">case WM_COMMAND:
        SendMessage ((HWND)lParam, WM_COMMAND, wParam, lParam);
        break;
</code></pre>
<p>Klappt wunderbar, nur na ja: nicht das wahre und extrem radikal!</p>
<p>Jetzt meine Frage daher (und nein, ich möchte nicht rumdiskutieren wieso ich es so wie die VCL haben möchte!) : Wie kann ich es erreichen, das mein Button den Funktionspointer aufruft, wenn ich auf ihn klicke und an das Elternfenster WM_COMMAND gesendet würde?</p>
<p>Danke im voraus <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/149947/vcl-vxl-ähnlicher-win32api-wrapper</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Jul 2026 10:55:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149947.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Jun 2006 18:19:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Sun, 11 Jun 2006 18:19:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ihr kennt doch sicherlich das Verfahren von Buttons in VCL. Buttons sind Instanzen, die ihre eigenen Nachrichten verarbeiten und nicht das Elternfenster.</p>
<p>Soetwas möchte ich gerne auch machen <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>Ich hatte mir das folgendermaßen gedacht: Eine Klasse namens &quot;button&quot; bekommt einen Funktionspointer auf eine Funktion die aufgerufen werden soll, wenn der Button gedrückt wird (Also WM_COMMAND an das Elternfenster gesendet wird).</p>
<p>Ich habe mit Subclassing meinen Button meine WndProc aufgetragen und das läuft auch Prima, WM_PAINT kommt an usw. leider jedoch nicht WM_COMMAND. <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="😞"
    /></p>
<p>Jetzt hab ich mir gedacht, wie ich das emulieren könnte: Alle möglichen Fensternachrichten abfangen und zusammenfügen, die dieses Ereignis auslösen könnten. Leider eine unzähmbare arbeit. <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="😞"
    /></p>
<p>Also bin ich zu extrem radikalen mitteln gegangen und habe im Elternfenster folgendes gemacht:</p>
<pre><code class="language-cpp">case WM_COMMAND:
        SendMessage ((HWND)lParam, WM_COMMAND, wParam, lParam);
        break;
</code></pre>
<p>Klappt wunderbar, nur na ja: nicht das wahre und extrem radikal!</p>
<p>Jetzt meine Frage daher (und nein, ich möchte nicht rumdiskutieren wieso ich es so wie die VCL haben möchte!) : Wie kann ich es erreichen, das mein Button den Funktionspointer aufruft, wenn ich auf ihn klicke und an das Elternfenster WM_COMMAND gesendet würde?</p>
<p>Danke im voraus <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1075795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075795</guid><dc:creator><![CDATA[guesting]]></dc:creator><pubDate>Sun, 11 Jun 2006 18:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Sun, 11 Jun 2006 18:22:02 GMT]]></title><description><![CDATA[<p>Ach das Thema hast du doch schonmal hier reingestellt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075797</guid><dc:creator><![CDATA[pfffffff]]></dc:creator><pubDate>Sun, 11 Jun 2006 18:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Sun, 11 Jun 2006 18:53:00 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe es jetzt mal wie folgt ausprobiert:</p>
<pre><code class="language-cpp">#include &lt;windows.h&gt;

typedef bool (*action)(void);

static const unsigned long WM_COMMAND_BUTTON = WM_APP+1;

class IButton
{
public:
    IButton (::HWND__* parent, HINSTANCE instance, unsigned long x, unsigned long y, action on_command) 
    {
        m_on_command = on_command;

        m_hwnd = ::CreateWindow (&quot;button&quot;, &quot;Test&quot;, WS_CHILD | WS_VISIBLE, x, y, 100, 100, parent, NULL, instance, 0);

        set_wndproc (m_hwnd);
    } 

private:

void set_wndproc(HWND hwndCombo)
{
	LONG OldComboProc;

	OldComboProc = GetWindowLong(hwndCombo, GWL_WNDPROC);
	SetWindowLong(hwndCombo, GWL_USERDATA, OldComboProc);

	OldComboProc = SetWindowLong(hwndCombo, GWL_WNDPROC, (LONG)WndProc);
}

static LRESULT WINAPI WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{	
	WNDPROC			OldComboProc = (WNDPROC)GetWindowLong(hwnd, GWL_USERDATA);

	switch(msg)
	{
    case WM_COMMAND_BUTTON:
        m_on_command ();
        break;
	}

	return CallWindowProc(OldComboProc, hwnd, msg, wParam, lParam);
}
    action      m_on_command;
    HWND   m_hwnd;
};

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_COMMAND:
        SendMessage ((HWND)lParam, WM_COMMAND_BUTTON, 0, 0);
        break;
   case WM_DESTROY:
             PostQuitMessage(0);
             return(0);
        default: break;
    }

  return(DefWindowProc(hWnd, uMsg, wParam, lParam));
}

bool button1 (void)
{
    MessageBox (NULL, &quot;&quot;, &quot;Button 1&quot;, MB_OK);
    return(true);
}

bool button2 (void)
{
    MessageBox (NULL, &quot;&quot;, &quot;Button 2&quot;, MB_OK);
    return(true);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow)
{
  WNDCLASSEX           wc;
  HWND                 hWnd;
  MSG                  msg;

    wc.cbSize        = sizeof(wc);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = (HICON)LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = (HCURSOR)LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = TEXT(&quot;Buttontest&quot;);
    wc.hIconSm       = (HICON)LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&amp;wc))
        return(0);
    if(NULL == (hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW | WS_EX_APPWINDOW, 
                          wc.lpszClassName, wc.lpszClassName, WS_OVERLAPPEDWINDOW, 
                          CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
                          NULL, NULL, hInstance, NULL)))
        return(0);

    IButton test_button1(hWnd, hInstance, 10, 10, button1);
    IButton test_button2(hWnd, hInstance, 210, 10, button2);

    ShowWindow (hWnd, nCmdShow);

    while(GetMessage(&amp;msg, NULL, 0, 0))
    {
        if(!IsDialogMessage(hWnd, &amp;msg))
        {
            TranslateMessage(&amp;msg);
            DispatchMessage (&amp;msg);
        }
    }

  return(msg.wParam);
}
</code></pre>
<p>Jedoch sagt er mir in der WndProc:<br />
button_test.cpp(40) : error C2597: illegal reference to non-static member 'IButton::m_on_command'</p>
<p>Wie kann ich dieses problem beheben? Wenn ich es static mache, bekomme ich linkerfehler <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075826</guid><dc:creator><![CDATA[guesting]]></dc:creator><pubDate>Sun, 11 Jun 2006 18:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Sun, 11 Jun 2006 19:03:48 GMT]]></title><description><![CDATA[<p>kannst de aber ruhig static machen... musst dann nur halt folgendes net vergessen:</p>
<pre><code class="language-cpp">action IButton::m_on_command = 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1075832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075832</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 11 Jun 2006 19:03:48 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Sun, 11 Jun 2006 19:07:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">return CallWindowProc(OldComboProc, hwnd, msg, wParam, lParam);
}
    static action IButton::m_on_command = 0;
    HWND   m_hwnd;
};
</code></pre>
<p>error C2864: 'IButton::m_on_command' : only static const integral data members can be initialized within a class</p>
<p>oder war das anders gemeint? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075837</guid><dc:creator><![CDATA[guesting]]></dc:creator><pubDate>Sun, 11 Jun 2006 19:07:32 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Sun, 11 Jun 2006 19:11:24 GMT]]></title><description><![CDATA[<p>ja war anders gemeint <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>Das ist sowas ähnliches wie nen konstruktor <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>Also:</p>
<pre><code class="language-cpp">return CallWindowProc(OldComboProc, hwnd, msg, wParam, lParam);
}
    static action m_on_command;
    HWND   m_hwnd;
}; 

static action IButton::m_on_command = 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1075841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075841</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 11 Jun 2006 19:11:24 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Sun, 11 Jun 2006 19:13:40 GMT]]></title><description><![CDATA[<p>genial, das geht! aber klicke ich auf button1 wird die falsche Funktion aufgerufen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1075842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1075842</guid><dc:creator><![CDATA[guesting]]></dc:creator><pubDate>Sun, 11 Jun 2006 19:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Mon, 12 Jun 2006 19:19:54 GMT]]></title><description><![CDATA[<p>*push*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076525</guid><dc:creator><![CDATA[guesting]]></dc:creator><pubDate>Mon, 12 Jun 2006 19:19:54 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Mon, 12 Jun 2006 19:27:03 GMT]]></title><description><![CDATA[<p>Schau Dir das hier an:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-149120.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-149120.html</a></p>
<p>Und wie dort schon erwähnt: Schau Dir MFC/wxWidget oder sonstige &quot;Frameworks&quot; an, die genau das gemacht haben...</p>
<p>PS: Und eine &quot;static&quot;-Variable zu definieren ist für eine &quot;Framework&quot; fast immer tödlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1076529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076529</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Mon, 12 Jun 2006 19:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to VCL&#x2F;VXL ähnlicher Win32API Wrapper on Mon, 12 Jun 2006 19:52:16 GMT]]></title><description><![CDATA[<p>Jo... das ist klar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> War aber auch klar das die Frage von ihm kommt <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1076548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1076548</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 12 Jun 2006 19:52:16 GMT</pubDate></item></channel></rss>