Skocz do zawartości

Re: kolory a dialogbox'y


Aspect

Recommended Posts

m-rog napisał:
1. W jaki sposób można zmienić kolor tekstu i tła w kontrolkach list,edit i static text???

Służą do tego komunikaty WM_CTLCOLOR..., które muszą być obsłużone przez kontrolkę rodzica. Dostajesz w nim uchwyt do kontekstu urządzenia, w którym będą wyrysowanie kontrolki, więc musisz zmodyfikować po prostu ten kontekst.

Link do komentarza
Udostępnij na innych stronach

Jeśli chodzi o dialogbox. Ten kod nie działa ponieważ odnośi się do sytuacji kiedy jest stworzone okno główne (hwnd) i ono wywołuje OpenFile. A umnie jest tylko jeden Dialogbox, który ma to wywołać!!!
Próbowałem zmodyfikować ten kod, ale wciąż nie działa!!!

A co do tej klasy...... chodziło mi o to czy ktoś ma swoją własną klase zrobioną przez siebie, która potrafiła by zrobić (prawie) wszystkie operacje na plikach.

Link do komentarza
Udostępnij na innych stronach

Czy uchwyt do okna hwnd jest poprawny tzn. czy to okno istnieje (może to twój dialog ale tego nie wiem :) ), jeśli nie to daj zamiast hwnd uchwyt do okna dialog.

Druga sprawa jeśli używasz
ofn.hInstance=hInst
to spróbuj dać taki kod w WM_CREATE albo WM_INITDIALOG:

hIns=((LPCREATESTRUCT)lParam) ->hInstance;

Osobiście mam to na NULL bo inaczej zawsze wywalało mi błąd :?

Link do komentarza
Udostępnij na innych stronach

Mój program nie ma głównego okna, tylko jest zwykły dialogbox.
A w "hwndOwner" mam zapisany jako null a w "hInstance" przypisałem tylko handle dialogbox'u.

To co mi podałeś próbowałem zrobić, ale wtedy program nie chciał się skompilować!!!

Potrzebuje jakieś linki lub proste programy, w których były by wykorzystane komonikaty tj.: WM_CTLCOLORSTATIC,WM_CTLCOLORDLG,WM_CTLCOLORLISTBOX.

Ostatnie pytanie. W jaki sposób wykorzystuje się funkcje DlgDirList w ListBox'ie????

Link do komentarza
Udostępnij na innych stronach

m-rog napisał:
Potrzebuje jakieś linki lub proste programy, w których były by wykorzystane komonikaty tj.: WM_CTLCOLORSTATIC,WM_CTLCOLORDLG,WM_CTLCOLORLISTBOX.

Poniższy fragment kodu wklej sobie do funkcji obslugi Twojego dialog boxa:

        case WM_CTLCOLORSTATIC:{
            SetTextColor ((HDC)wParam,RGB(0,0,255)) ;
            SetBkMode((HDC)wParam,TRANSPARENT);
            HBRUSH hbrStatic=CreateSolidBrush(RGB(255,0,0));
            return (LRESULT) hbrStatic;}

Zmienia on kolor tekstu na niebieski i kolor tła na czerwony we WSZYSTKICH staticach będących dziećmi tego dialog boxa.

m-rog napisał:
Ostatnie pytanie. W jaki sposób wykorzystuje się funkcje DlgDirList w ListBox'ie????

Polecam MSDN, tam są wszystkie funkcje dokładnie opisane.

Link do komentarza
Udostępnij na innych stronach

1. "OpenFileName" -> Czy może mi ktoś powiedzieć w jaki sposób mam poprawnie uzupełnić strukture OPENFILENAME!!! Mój program składa się z jednego dialog boxu, a menu jest wywoływane OpneFileName.
W zmiennych: hwndOwner; hInstance; wpisuje poprawnie uchwyty i okno nie chce się pokazywać. Sądze, że trzeba jeszcze uzupełnić zmienne: lpTemplateName, lCustData, ale nie wiem jak. Prosze o pomoc!!

2. Czy jest jakaś funkcja, która usuwa katalog bez względu na to czy jest pusty???

Link do komentarza
Udostępnij na innych stronach

Kod OpenFile:

OPENFILENAME ofn ; //lokalna
int x = MAKEINTRESOURCE("DIALOGBOX1");
wm_create:
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hdwnd1; //pobierane z MSG dialogbox'a
ofn.hInstance= hInst2; //handle dialogbox'a
ofn.lpTemplateName= x ;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 1;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_FILEMUSTEXIST;
break;

Samo wywołanie funkcji NAPEWNO jest dobre.

Link do komentarza
Udostępnij na innych stronach

  1. OPENFILENAME ofn ; //lokalna

    Jeżeli ta zmienna jest lokalna i nie jest statyczna, to w następnym wywołaniu procedury obsługi wartości, które podałeś w WM_CREATE nie będą już znane. Jeżeli tak samo masz w programie, to dialog OpenFileName nie będzie się otwierał.

  2. int x = MAKEINTRESOURCE("DIALOGBOX1");

    Tu Ci się po prostu chyba pomyliło, jak przepisywałeś na forum. Makro MAKEINTRESOURCE pobiera identyfikator(liczbowy) kontrolki i zamienia go na ciąg znaków. Ale to nie ma z Twoim głównym problemem żadnego związku raczej. Tak samo jak i punkt następny.

  3. ofn.lpTemplateName= x ;

    To pole i tak jest u Ciebie ignorowane, poniewaz nie dałęś flagi OFN_ENABLETEMPLATE.

Link do komentarza
Udostępnij na innych stronach

Zmienną OPENFILENAME ofn zmieniłem na statyczną i nadal nie chce działać.

Jeśli chodzi o MAKEINTRESOURCE i ofn.lpTemplateName to przeczytałem w msdn2003apr ,że do lpTemplateName musze przypisać nazwe otrzymaną z makeintresource, dlatego właśnie tak zrobiłem.

Gdyby miał ktoś pomysł jak zrobić aby uruchomić OpenFileName to prosze napisać na forum (bo ja już nie mam pomysłów) !!

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...