Nemo Napisano Lipiec 2, 2018 Autor Zgłoś 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
Jarema Napisano Lipiec 2, 2018 Zgłoś 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
Nemo Napisano Lipiec 2, 2018 Autor Zgłoś 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
Jarema Napisano Lipiec 3, 2018 Zgłoś 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
Nemo Napisano Lipiec 3, 2018 Autor Zgłoś 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
Nemo Napisano Lipiec 8, 2018 Autor Zgłoś 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
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.