<?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[&amp;quot;kleines&amp;quot; problem mit tastaturabfrage bei nichtmodalen dialogen]]></title><description><![CDATA[<p>hi...<br />
habe das problem, dass ich die nachrichtenverarbeitung noch nicht so ganz kapiere...<br />
ich möchte ein oder mehrere nichtmodale dialoge erzeugen und vom jeweils aktiven die tastatureingabe abfangen (WM_KEYDOWN)...</p>
<p>da ich von natur aus faul bin, habe ich meinen &quot;main-dialog&quot; mit DialogBox erstellt...</p>
<pre><code class="language-cpp">int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
	ghInst = hInstance;
	int iRet;

	iRet = DialogBox(ghInst, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, (DLGPROC)dlgProcMain);
	return false;
}
</code></pre>
<p>der 2te dialog soll nichtmodal werden, deswegen createdialog!?</p>
<pre><code class="language-cpp">BOOL CALLBACK dlgProcMain( HWND hwndMain, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch(uMsg)
	{

	case WM_INITDIALOG:

		ghwndMain = hwndMain;
		break;

	case WM_COMMAND:
		switch(wParam)
		{
           case IDC_BtnDia2: 
           if(!IsWindow(ghwndShow))
			{
				ghwndShow = CreateDialog(ghInst, MAKEINTRESOURCE(IDD_DIALOG_SHOW), ghwndMain, (DLGPROC)dlgProcShow);
				ShowWindow(ghwndShow, SW_SHOW);
			}
			else
				SendMessage(ghwndShow, WM_INITDIALOG, 0, 0);

			SetForegroundWindow(ghwndShow);
			break;
        }
   }
...
}
</code></pre>
<p>nachdem was ich bis jetzt gefunden hab könnte man das prob. mit einem Hook lösen (dachte nur, es geht vllt auch etwas einfacher)...</p>
<p>als nächtes gibts die nachrichtenschleife....</p>
<pre><code class="language-cpp">while(GetMessage(&amp;Msg, NULL, 0, 0))
    {
        if(!IsDialogMessage(hwnd, &amp;Msg))
        {
            TranslateMessage(&amp;Msg);
            DispatchMessage(&amp;Msg);
        }
    }
</code></pre>
<p>nun mein eigentliches problem:<br />
kann/darf ich diese schleife mit einbauen, wenn ich &quot;DialogBox&quot; benutze?<br />
wenn ja wo?<br />
wenn nicht, gibts eine andere möglichkeit die eingaben abzufangen?</p>
<p>MfG<br />
Schandmaul</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149472/quot-kleines-quot-problem-mit-tastaturabfrage-bei-nichtmodalen-dialogen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 06:04:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149472.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Jun 2006 12:12:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to &amp;quot;kleines&amp;quot; problem mit tastaturabfrage bei nichtmodalen dialogen on Tue, 06 Jun 2006 12:12:00 GMT]]></title><description><![CDATA[<p>hi...<br />
habe das problem, dass ich die nachrichtenverarbeitung noch nicht so ganz kapiere...<br />
ich möchte ein oder mehrere nichtmodale dialoge erzeugen und vom jeweils aktiven die tastatureingabe abfangen (WM_KEYDOWN)...</p>
<p>da ich von natur aus faul bin, habe ich meinen &quot;main-dialog&quot; mit DialogBox erstellt...</p>
<pre><code class="language-cpp">int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow )
{
	ghInst = hInstance;
	int iRet;

	iRet = DialogBox(ghInst, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, (DLGPROC)dlgProcMain);
	return false;
}
</code></pre>
<p>der 2te dialog soll nichtmodal werden, deswegen createdialog!?</p>
<pre><code class="language-cpp">BOOL CALLBACK dlgProcMain( HWND hwndMain, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch(uMsg)
	{

	case WM_INITDIALOG:

		ghwndMain = hwndMain;
		break;

	case WM_COMMAND:
		switch(wParam)
		{
           case IDC_BtnDia2: 
           if(!IsWindow(ghwndShow))
			{
				ghwndShow = CreateDialog(ghInst, MAKEINTRESOURCE(IDD_DIALOG_SHOW), ghwndMain, (DLGPROC)dlgProcShow);
				ShowWindow(ghwndShow, SW_SHOW);
			}
			else
				SendMessage(ghwndShow, WM_INITDIALOG, 0, 0);

			SetForegroundWindow(ghwndShow);
			break;
        }
   }
...
}
</code></pre>
<p>nachdem was ich bis jetzt gefunden hab könnte man das prob. mit einem Hook lösen (dachte nur, es geht vllt auch etwas einfacher)...</p>
<p>als nächtes gibts die nachrichtenschleife....</p>
<pre><code class="language-cpp">while(GetMessage(&amp;Msg, NULL, 0, 0))
    {
        if(!IsDialogMessage(hwnd, &amp;Msg))
        {
            TranslateMessage(&amp;Msg);
            DispatchMessage(&amp;Msg);
        }
    }
</code></pre>
<p>nun mein eigentliches problem:<br />
kann/darf ich diese schleife mit einbauen, wenn ich &quot;DialogBox&quot; benutze?<br />
wenn ja wo?<br />
wenn nicht, gibts eine andere möglichkeit die eingaben abzufangen?</p>
<p>MfG<br />
Schandmaul</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072437</guid><dc:creator><![CDATA[Schandmaul]]></dc:creator><pubDate>Tue, 06 Jun 2006 12:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to &amp;quot;kleines&amp;quot; problem mit tastaturabfrage bei nichtmodalen dialogen on Tue, 06 Jun 2006 16:30:02 GMT]]></title><description><![CDATA[<p>Diese Nachrichtenschleife macht bei einer DialogBox keinen Sinn! DialogBox hat selbst eine Nachrichtenschleife.<br />
Wenn Du DialogBox verwendest, hast Du gar keine Möglichkeit die Tastatureingaben vorzufiltern, außer Du verwendest einen Hook.</p>
<p>Einfacher ist es den Dialog nicht Modal zu bauen, dann eine entsprechende Nachrichtenschleife selbst zu bauen, in der Du IsDialogMessage verwendest.<br />
Evtl. dann von Hand, den Parent Dialog disablen und wieder enablen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1072656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1072656</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 06 Jun 2006 16:30:02 GMT</pubDate></item></channel></rss>