Nemo Napisano Lipiec 2, 2018 Autor Zgłoś Udostępnij Napisano Lipiec 2, 2018 Przeczytaj dokladnie pierwszego posta. Oto wazniejszy urywek: Piasiu napisał: Nie chodzi mi tu o modalne okno dialogowe tylko zwykle okno... Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Jarema Napisano Lipiec 2, 2018 Zgłoś Udostępnij Napisano Lipiec 2, 2018 Tobie nie chodzi jednak o dialogi. Przejrzałem wszystkie style okien, ale nie spotkałem żadnego które by dawało modalność, DS_MODALFRAME nie działa bo DS to prefiks od DIALOG STYLE. Ale możesz pokombinować coś sam np. z przekazywaniem fokusu, żeby twoje okno jeśli jest włączone nie dało fokusu żadnemu innemu oknu w programie. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Lipiec 2, 2018 Autor Zgłoś Udostępnij Napisano Lipiec 2, 2018 dobry pomycl ale nie do kocna dobry ;) ale wymyslilem takie cos daje do funkcji komunikatow takei cos: if(IsWindowVisible(hwnd_t) && Msg!=WM_PAINT && Msg!=WM_NCPAINT) return 0; switch(Msg) { [...] case WM_SETOCUS: SetFocus(hwnd_t); return 0; [...] } i wszystko parwie dzial ale: jak rusze tym oknem "modalnym" to okno glowne nie odswierza sie tylko zostaje taka maźia po oknie modalnym (jedynie to co w obsludze WM)PAINT jest sie odswieza) jak zminimalizuje okno modalne i je potem przywrice to nie wiem czemu ale traci ono focus, tzn aktywne jest okno glowne - ma aktywny pasek ale nie reaguje na nic tak samo jak modalne dziwna sparwa z tym :| a moze zrobic tak: w glownej petli ignorowac wszystkie komunikaty i tylko odbierac te do okna modlanego eh sam jzu nie wiem ;] Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Jarema Napisano Lipiec 3, 2018 Zgłoś Udostępnij Napisano Lipiec 3, 2018 nie kumam zabardzo o co z tym chodzi: if(IsWindowVisible(hwnd_t) && Msg!=WM_PAINT && Msg!=WM_NCPAINT) return 0; po co to? i co to jest funkcja komunikatów? chodzi ci o pętlę komunikatów czy procedurę okna? Zrób tak: po prostu w procedurze okna okna głównego przechwyć komunikat WM_SETFOCUS: case WM_SETFOCUS: if (IsWindowVisible(hwnd_oknomodlane)) SetFocus(hwnd_oknomodalne); return 0; To powinno pomóc, ale nie kombinuj nic z pętlą komunikatów. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Lipiec 3, 2018 Autor Zgłoś Udostępnij Napisano Lipiec 3, 2018 Z petla nic nie kombinowalem tylko tak sobie pomyslalem. A ten kod co jest w moim poscie wyzej to kod z procedurki okna glownego, a hwnd_t to uchwyt okna modalnego (zamonialem to napsiac). Ja zrobilem z tym fokusem tak jak napsailes teraz ale mi to nie dzialal tak jak powinno wiec zrobilem tak jak w kodzie wyzej ale tez nei do konca dobrze ;) Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Lipiec 8, 2018 Autor Zgłoś Udostępnij Napisano Lipiec 8, 2018 Dla tych ktorzy by kiedys potrzebowali ;) Obsluga jest przyjemna. Jak piszmey: ShowWindow(hwnd_m, SW_SHOWNORMAL); to okienko modalne sie uruchamia a jak je zamykamy to okienko nie zostaje zniszczone tylko ukryte dzieki czemu potem mozemy ponownie uruchomic oko modalne poprzez ShowWindow ;) HWND hwnd; // uchyt okna głównego HWND hwnd_m; // uchyt okna modalnego //funkcja okna glownego LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { //tutaj co tam chcecie ;) } //funkcja okna modalnego LRESULT CALLBACK ModWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { LRESULT CALLBACK WndProcT(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch(Msg) { case WM_SHOWWINDOW: EnableWindow(hwnd, !((BOOL)wParam)); return 0; case WM_CLOSE: ShowWindow(hWnd, SW_HIDE); return 0; } return DefWindowProc(hWnd, Msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; WNDCLASS wndclass; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hIcon = LoadIcon(NULL, IDI_WINLOGO); wndclass.hInstance = hInstance; wndclass.lpfnWndProc = WndProc; wndclass.lpszClassName = szAppName; wndclass.lpszMenuName = NULL; wndclass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndclass); hwnd = CreateWindow(szAppName, TEXT("Okno"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); /******** okno modalne ************/ wndclass.lpfnWndProc = ModWndProc; wndclass.lpszClassName = szModName; RegisterClass(&wndclass); hwnd_m = CreateWindow(szModName, TEXT("Modalne Okno"), WS_POPUPWINDOW|WS_CAPTION, 0, 0, 400, 300, hwnd, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); ShowWindow(hwnd_m, SW_SHOWNORMAL); UpdateWindow(hwnd_m); while(TRUE) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if(msg.message==WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } pozdrawiam Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.