Fenster innerhalb von anderem Fenster bleiben lassen.
-
Guest9xx schrieb:
hallo Community,
ich lade eine DLl in einen Prozess der ein Fenster hat. Ich möchte jedoch, dass man das Fenster aus meiner DLL nicht über den Rand bzw. clientbereich des anderen Ziehen kann. Als Parent setzen ist leider keine Lösung, da dann die eingabe für das Hauptfenster blockiert wird.Klar ist das eine Lösung, Du darfst nur nicht das Parent disablen. Wie erzegst Du denn Dein Fenster. Ich hoffe nicht als modalen Dialog...
-
mit DialogBox
-
Guest9xx schrieb:
mit DialogBox
Eben!
Erzeuge den Dialog nicht modal und gut ists.
-
danke so klappt es!
extern "C" void __declspec(dllexport) Funcname() { HWND lol = CreateDialog(hInstDll, MAKEINTRESOURCE(IDD_DIALOG1), Window, mainDlg); ShowWindow(lol, SW_SHOW); }aber es kommt ja sofort zurück, die Funktion soll aber nicht abgeschlossen werden. Kann ich einfach ein while(1) Sleep(50); adden oder lieber
MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }damit die Funktion Funcname nicht beendet wird?
-
ich war wohl etwas voreilig... obwohl ich CreateDialog mit dem HWND vom Parent benutze, kann ich das Fenster über den Clientbereich des parents ziehen

-
Wenn Du nicht willst das das Parent disabled wird, dann musst Du WSA_CHILD verwenden. Dann kannst Du es aber nicht mehr verschieben.
Wenn Du willst, dass die Operation abgeschlossen wird, musst Du verhindern das im Parent was geschieht, es also disbalen.
Irgendwie widersprechen sich Deine Wünsche in meinen Augen...Ansonsten hast Du den Tipp auf WM_MOIVING schon erhalten.
-
ich schreibe am besten noch was genau ich will und was ich versucht habe:
Ich will, dass ich mein Dialog Fenster nicht über den Clientbereich des Hauptfensters des Programms ziehen kann, aber trotzdem den Focus auf das Hauptfenster setzen kann und mit ihm arbeiten kann (das Fenster aber trotzdem im Clientbereich bleibt). Ich habe CreateDialog mit dem Hauptfenster als parent benutzt, aber ich kann es immernoch über den Clientbereich ziehen. Und bei DialogBox wird das parent disabled -> keine Lösung.
-
Muss ich also WM_MOVING auswerten?
-
Guest9xx schrieb:
Muss ich also WM_MOVING auswerten?
Lies doch einfach die Doku, dann kannst Du selber die Entscheidung treffen.
http://msdn.microsoft.com/en-us/library/ms632632(VS.85).aspxUnd hilft Dir das?
-
Vielleicht meint er sowas (child dialog):
BOOL CALLBACK DialogMain(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam),BOOL { if (uMsg == WM_CLOSE) { EndDialog(hwnd,0); PostQuitMessage(0); } return FALSE; } int main() { HWND hDlg = CreateWindow(WC_DIALOG,TEXT("Parent dialog"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,0,0,0,0); if (hDlg) { ShowWindow(hDlg, SW_SHOW); CreateWindow(WC_DIALOG,TEXT("Child dialog"),WS_OVERLAPPEDWINDOW|WS_VISIBLE|WS_CHILD,100,100,200,100,hDlg,0,0,0); SetWindowLong(hDlg, DWL_DLGPROC, &DialogMain); MSG msg; while (GetMessage(&msg,0,0,0)) { if (!IsDialogMessage(hDlg, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } } }Du kannst also CreateDialog statt CreateWindow nehmen, aber vergis WS_CHILD nicht.
Martin, ohne (VS.85) schon mal versucht ?
