Skocz do zawartości

Jarema

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Posty napisane przez Jarema

  1. No ja już naprawdę nie wiem (moja psychika już siada): https://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/staticcontrols/staticcontrolreference/staticcontrolstyles.asp | Jeśli mi powiesz że szukałeś i nie było to ja jestem Matka Teresa z Kalkuty ;)

  2. To jest najzwyklejsza kontrolka ktora stworzysz CreateWindow. (Nie wierze ze nie znalazles tego na Microsofcie, oczywiscie jesli szukales w MSDN, bo jak na stronie glownej to powodzenia) No a manual do Winapi, coz ale nie sadze zebyc znalaz cos lepszego od MSDN.

  3. Teraz to już naprawdę Cię nie rozumiem. Z Twoich postów domyślam się że jesteś głęboko początkujący. Ale nie czaję tego dlaczego pytasz o program używający menu skoro podałem Ci go juz 2 razy. Przecież to jest normalny program tyle że nie zmontowany w projekt. Mam dla Ciebie taką radę, jeśli chcesz zobaczyć że to naprawdę program to utwórz sobie nowy projekt dodaj do niego pliczek z rozszerzeniem *.c, wklej do niego ten kod, potem utwórz sobie pliczek z rozszerzeniem *.rc, wklej do niego kwałek kodu opatrzony moim komentarzem "plik z zasobami". Skompiluj i odpal. Jeśli wtedy zrozumiesz że to co podałem to program to chyba będzie Ci łatwiej zrozumieć swój błąd. Tak na marginesie to dobrze radziłbym trochę zapoznać się z jakiegoś kursu np. z: tego.

  4. na 90% mylisz nazwe zasobu. Tak dla malego sprostowania, nazwa projektu nie musi byc wcale taka sama jak pliczek z kodem w nim, bo jak sadze projekt1234.cpp to nazwa pliku z kodem. A jesli chodzi o nazwe skryptu z zasobami to jest taka jaka nadales, bo rozumiem ze jak dolaczales zasoby to najpierw utworzyles plik z rozszerzeniem *.rc, zreszta zobacz sobie w katalogu z projektem on tam musi byc. Ale plik nagłówkowy zasobow musisz zalaczac prawidlowo skoro nie zlasza kompilator zadnych bledow. Coz pokombinuj cos bo z tymi zasobami to czesto sa takie klocki. ;)

  5. Sprawdzalem to moim programem pisanym na bazie tejze funkcji. I wywnioskowalem ze nie chodzi o to ze zwraca cos dziwnego tylko poprostu nie widzi wogole MessageBox-ow ktore sa uruchamiane w jednej instancji z jakims programem. Natomiast jesli uruchomisz program bez procedury okna wywolujacy poprostu MessageBox to wykryje go jako osobne okno.

    Uwazam ze nie ma co sie klucic w tej sprawie. Poprostu twoje rozwiazanie jest bezkonkurencyjne jesli nadawca tematu chce miec wszytkie procesy ktore sa uruchomione w systemie, ale wtedy kosztem tego bedzie musial filtrowac to jakos zeby dostac tylko programy ktore chce wyswietlic. Natomiast moje jest dobre do tego zeby wychwycic tylko programy "typowe" takie ktore maja okienka, te ktorych uzytkownik swiadomie uzywa.

  6. Wezmie pod uwage konsolowe programy bo jakby nie bylo sa one odpalane w oknie. Rowniez nie potraktuje MessageBox-a jako osobny program nawet jesli jako HWND damy NULL, bo sprawdzalem. Najpierw radze sprawdzic zanim cos sie powie ;). Poza tym nie uwazam ze napisanie jednej funkcji jest duzym wysilkiem dla programisty i programu, no oczywiscie zalezy jakim kto jest programista - nie ma w tym wypowiedzeniu zadnych aluzji.

    Powodzenia.

  7. Jest prostszy sposób, ale uzyskasz nim jedynie programy mające okna:

    Musisz użyć funkcji EnumWindows(WNDENUMPROC lpWndProc, LPARAM lParam); gdzie lpWndProc to wskaźnik do procedury wyliczającej wszytkie programy mające okna, w lParam przekazujesz sobie wskaźnik do tablicy uchwytów okien.

    EnumWindowsProc ma następującą postać:

    EnumWindowsProc(HWND hwnd, LPARAM lParam)
    {
    HWND *TabhWnd = (HWND*)lParam;
    static int i = 0;       
    
    TabhWnd[i] = hwnd;
    i++;
    
    return TRUE;
    }
    

    Teraz do tablicy TabhWnd masz wpisane uchwyty wszytkich okien działająch programów. I z takim uchwytem możesz pobrać łatwo nazwę programu (widniejącą na pasku tytułu) w ten sposób:

    GetWindowText(TabhWnd[i], title, 49);
    

    Tylko uwaga, musisz pamiętać by to i w funkcji za każdym razem zerować po wywołaniu EnumWindows.

    To tyle, miłego kodowania.

  8. Owszem. Jest ich dużo więcej, głównie właśnie funkcje z ikonkami, bitmapami itp. Jeśli pobierzesz sobie raz uchwyt ikonki (stworzysz nowa i otrzymaz do niej uchwyt) to niezbyt obciąża zasoby, ale jeśli utworzysz pętle to może być "mały" problem w zależności od ilości pamięci. Dobrze mieć MSDN bo tam pod każdą taką funkcją jest to ostrzeżenie, że użytkownik musi sam zlikwidować zaalokowane zasoby.

  9. MSDN:

    It is the responsibility of the calling application to destroy the icon returned from this function using theDestroyIcon function.

    Z tego tekstu dokładnie wynika że trzeba usuwać tak stworzone ikony, za kazdym razem jest tworzony nowy obiekt typu HICON i jest rezerwowana na niego pamięć.

  10. W zdarzeniu WM_PAINT jest odmalowywane całe okno. Więc tak się dzieje, ponieważ w WM_PAINT masz tylko jeden tekst ktory chcesz wyswietlic dlatego wyswietla tylko jeden, a cala reszte zamalowywuje na tlo. Jeśli chcesz w ten sposob pisac to musisz wszytko robic w WM_PAINT, albo z WM_PAINT za każdym razem wysyłać komunikat w którym jest malowany pozostały tekst.

  11. Problem polega na tym ze istnieje konflikt identyfikatorow. Jesli stworzysz okno i na nim masz tekst w StaticControl ktory ma ID: IDC_STATIC1 to na drugim oknie jest to samo. Jeśli zmienisz text w pierwszym oknie automatycznie jest dokonywana zmiana w drugim ponieważ to ten sam identyfikator. Moze powinienes jakos uzyc MDI, chociaz chyba jest jakis prostszy sposob.

  12. Sorki ze nie napisalem odrazu, ale nie mialem przy sobie MSDN. ListView_GetTopIndex( hList ); - to funkcja na pobranie najwyzszego elementu. ListView_Scroll( hList, 0, cxSpace ) ); - tak scrollujesz. ListView_GetItemRect( hList, 0, &rect, LVIR_BOUNDS ); - tak pobierasz wysokość elementu ListView, z tym że cy = rect.bottom - rect.top;

    To chyba wszystko. :)

  13. Zgadzam się z przedmówcą. Musisz najpierw pobrać index elementu znajdującego się na samej górze, jest do tego specjalna funkcja. Potem użyc scrollowania, pobrany_index*wysokość_elementu. Wtedy będzie działało bezbłędnie.

  14. Dokładnie tak jak poprzednicy. MFC to taka nakładka na Winapi. I podobnie jak poprzednik radzę Ci zainteresować się .NET-em zamiast MFC bo MFC to po pierwsze duże zamieszanie, a po drugie duży bałagan i nieład.

  15. Cóż, książkę posiadam, jak i przykłady do niej. Lecz jest maly problem, mam modem. Ale to najprawdopodobniej sie zmieni juz w tym tygodniu, wiec jak tylko bede mial to stale to postaram sie to wyslac podobnie jak tego nowego Petzolda ;) ktorego juz obiecuje duzo czasu, za to wszystkich przepraszam. Postaram sie to zrobic jak najszybciej.

×
×
  • Utwórz nowe...