Wir haben eine von CView- Abgeleitete Klasse. In der erzeugen wir einen in
einer C#- Lib eingebetteten Dialog mit
UnsereLib::UnserDialog ^dlg=gcnew UnsereLib::UnserDialog();
dlg->Show(gcnew UnsereLib::WindowWrapper(System::IntPtr(m_hWnd)));
WindowWrapper ist eine Klasse die von System.Windows.Forms.IWin32Window
abgeleitet ist und das HWND f�r den C#- Dialog aus dem IntPtr umwandelt.
In dem Dialog funktionieren die Eingaben in Textboxen (wenn ich die mit der
Maus aktiviere). Auch lassen sich die Buttons mit der Maus anklicken. Nur
wenn ich die Tabulatortaste dr�cke, kommt ein Windows- Message- Ping. Selbst
dann, wenn ich vorher mit der Maus eine Textbox aktiviert habe.
Hat jemand eine Idee, warum dies so ist???
Vielen Dank.
Gru�,
Markus
> dlg->Show(gcnew UnsereLib::WindowWrapper(System::IntPtr(m_hWnd)));
>
> In dem Dialog funktionieren die Eingaben in Textboxen (wenn ich die mit der
> Maus aktiviere). Auch lassen sich die Buttons mit der Maus anklicken. Nur
> wenn ich die Tabulatortaste drᅵcke, kommt ein Windows- Message- Ping. Selbst
> dann, wenn ich vorher mit der Maus eine Textbox aktiviert habe.
Wenn Du das Fenster nur "anzeigst" (also nicht als Dialog), dann musst
Du selber fᅵr das Dialog-Handling sorgen (das ist nicht C# spezifisch).
Also baue in Deiner "normalen" Message-Loop ein
"IsDialogMessage":
while(GetMessage(&msg, NULL, 0, 0))
{
if(!IsDialogMessage(hWndDlg, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Siehe auch:
http://msdn.microsoft.com/en-us/library/ms644996.aspx#modeless_box
Greetings
Jochen