Skocz do zawartości

Trace

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Trace's Achievements

Newbie

Newbie (1/14)

0

Reputacja

  1. Trace

    Przysłanianie kontrolek

    Swego czasu miałem podobny problem, rozwiązałem go jednak w inny sposób. Stworzyłem sobie nową klasę okna i na tabie umieszczałem jedynie okno tej klasy. Dopiero na nim znajdowały się poszczególne kontrolki. Kiedy użytkownik zmieniał zakładkę, przy pomocy funkcji ShowWindow ukrywałem stare okno bazowe (SW_HIDE), a nowe pokazywałem (SW_SHOW). Z tego co mi wiadomo podobnie działają równierz taby w property sheetach więc metoda ta nie była zła. Pozdrawiam :)
  2. Może spróbuj pogrzebać trochę w tym pliku mysql_com.h i zobaczyć co jest przyczyną błędu? Ja w ten sposób odkryłem, że wypada definiować wersję internet explorera w programach pod windowsa :P
  3. Trace

    Znikający tekst

    Wrzucić to do WM_PAINT? Tylko wtedy zamiast GetDC używaj BeginPaint, inaczej tekt będzie ci cały mrugał. A tak wogóle to do wyświetlania tekstu znakomicie nadają się kontrolki static, wtedy nie trzeba sobie zaprzątać głowy czcionkami, kolorami, tłem i innymi pierdołami. Pozdrawiam.
  4. Błąd popełniasz przy tworzeniu statica. Na HMENU rzutujesz jedynie wartość 250, a dopiero potem dodajesz do tego i. To powoduje, że id kontrolki jest inny, niż zamierzony. Aby to naprawić, wystarczy wstawić (250+i) w nawiasy :). Wtedy wartość całego wyrażenia będzie rzutowana na HMENU i w konsekwencji id kontrolki będzie miał właściwą wartość. hPoletxt[i] = CreateWindow("static", "tekst", WS_CHILD | WS_VISIBLE, 11, 136+(i*18), 388, 18, hwnd, (HMENU)(250+i), hInst, NULL); Po tej zmianie SetDlgItemText będzie działał jak należy. WM_SETTEXT nie działał ci, ponieważ zapomniałeś tablicę hPoletxt zadeklarować jako static (była usuwana zaraz po zakończeniu WM_CREATE), więc komunikat wysyłałeś do jakiegoś całkowicie dowolnego obszaru pamięci :P To by było na tyle. Pozdrawiam.
  5. Do ustawiania tekstu w staticu i edicie używasz funkcji SetWindowText. I to tutaj tkwi problem, gdyż funkcja ta służy do innych celów. Zamiast tego skorzystaj z SetDlgItemText(podając uchwyt okna-rodzica oraz id kontrolki), bądź wyślij bezpośrednio do kontrolki komunikat WM_SETTEXT. case 201: { /* Tu pojawia się mój pierwszy problem. Chcę, aby po kliknięciu w button Szukaj, w staticu hPoletxt[1] pojawił się tekst "!!!", jednak się nie pojawia :( */ // id hPoletext[1] to 251 SetDlgItemText(hwnd, 250 + 1, "!!!"); break; } Teraz listbox. Z tego co pomiętam, rodzic jest zawiadamiany o podwójnym kliknięciu w listboxie poprzez komunikat LBN_DBLCLK. Musisz więc zmienić: case 209: // ListBox /* Tu pojawia się mój drugi problem Chcę, aby po podwójnym kliknięciu na element z listboxa zawartosc pola została skopiowana do pola hEdit1 */ { // intrukcja switch, która tu się znajdowała, jest zbędna :P if (HIWORD(wParam)==LBN_DBLCLK) { index = SendMessage (hList, LB_GETCURSEL, 0, 0 ) ; // to LB_GETTEXT było wysyłane do hwnd... Rozumiem, że to tylko niedopatrzenie :P SendMessage (hList, LB_GETTEXT, index, (LPARAM) wyraz ) ; SetDlgItemText(hwnd, 207, wyraz); return 0; } break; } A tak na marginesie, to nie rozumiem, dlaczego wszystkie zmienne są globalne i zadeklarowane na początku programu... Nawyki z Pascala(Delphi)? Niewiem jak sądzą inni, ale dla mnie kod staje się przez to mniej czytelny. Pozdrawiam.
  6. Spróbój też pokombinować z ListView_Update, np. wysyłając LVM_UPDATE do wszystkich itemów lub tylko do większych niż dodany. Może pomoże.
  7. Bład tkwi w tym, że zwracasz referencję do obiektu tworzonego lokalnie. W chwili, gdy zakończy się działanie wewnątrz przeciążonego operatora, wszystkie obiekty w nim stworzone są usuwane z pamięci i zwrócona referencja wskazuje na nic. Rozwiązaniem tego problemu jest zwrócenie obiektu przez wartość. Twój przeciążony operator powinien wyglądać więc tak: X operator+(const X& x2) { X kopia_wyjsciowa; // operacje sumujące tabilce z this i x2 return kopia_wyjsciowa; } Tylko pamiętaj o prawidłowym skonstruowaniu konstruktora kopijącego, gdyż odgrywa on w procesie przypisania kluczową rolę.
  8. Trace

    Re: Ścieżka do programu

    Hehe... Poszukaj w C:\Windows\System, albo C:\Windows\System32 ;) Jest to biblioteka dostarczana razem z systemem windows, więc nie musisz martwić sięo rozpowszechnianie jej razem z kopią swojego programu. Aby korzystać z jej dobrodziejstw w Devie (5.0 Beta) wystarczy dodać: #include <shlwapi.h> I zlinkować program z biblioteką libshlwapi.a (w katalogu Dec\lib). I będzie działać (myślę, że w Dev4 i każdym innym kompilatorze robi sie to tak samo).
  9. A nie powinno być int** mxData = new (int *)[a]; for(int i = 0; i < a; i++) mxData[i] = new int[b]; for(int i = 0; i < a; i++) delete [] mxData[i]; delete [] mxData; bądź int * mxData = new int[a]; for(int i = 0; i < a; i++) mxData[i] = (int)(new int[b]); for(int i = 0; i < a; i++) delete [] (int *)mxData[i]; delete [] mxData; Obie metody są jednakowo dobre, gdyż każdy wskaźnik można przedstawić za pomocą liczby :) Sprawdzałem i w obu przypadkach mój gcc-3.3.4 nie zgłaszał błędów :)
  10. Trace

    BM_SETCHECK

    kAzek ma rację... Sprawdziłem i po wysłaniu BM_SETCHECK nie dostaję komunikatu WM_COMMAND. Wydawało mi się, że kiedyś takie rowziązanie wykorzystałem w jednym z moich programów, ale tam wysyłałem do checkbox BM_CLICK i wtedy w WM_COMMAND dopiero WM_SETCHECK i inne akcje... Sorx za wprowadzenie błąd Errare humanum est :)
  11. Trace

    Biblioteka w Dev C++

    Nie wiem, czy ma to jakiekolwiek znaczenie i czy w jakiś sposób mój post ci pomoże... Mam nieco odmienną składnię w pliku "H" i mi Dev wszystko ladnie kompiluje. Zamiast jednego podkreślnika przed declspec mam dwa, a w deklaracji funkcji słówko EXPORT wstawiam dopiero po definicji typu zwracanej wartości. Tak więc twój plik u mnie wyglądałby tak: #ifdef __cplusplus #define EXPORT extern "C" __declspec(dllexport) #else #define EXPORT __declspec(dllexport) #endif BOOL CALLBACK EXPORT EdrCenterTextA (HDC,PRECT,PCSTR); A gdyby to nie pomogło: extern "C" { BOOL CALLBACK __declspec(dllexport)EdrCenterTextA (HDC,PRECT,PCSTR); } Aha, jeszcze jedno. W pliku "C" windows.h dołączam przed plikiem "H" od dlla. Jeszcze raz powtarzam, ze nie mam zielonego pojęcia, czy ma to jakieś znaczenie. Spróbować jednak nie zaszkodzi, bo kto szuka, nie błądzi :P
  12. Trace

    BM_SETCHECK

    Czy na pewno trzeba posuwać się aż do subclassingu? Zawsze myślałem, że checkbox wysyła po kliknięciu (bądź wysłaniu BM_SETCHECK) komunikat WM_COMMAND tak, jak zwykly button...
  13. Trace

    Buforek :)

    Przerabiając trochę twój kod to będzie coś w tym stylu: LPSTR Bufor; Rozmiar = GetWindowTextLenght(Adres); Bufor = (LPSTR)GlobalAlloc(GPTR, Rozmiar+4); GetWindowText(Adres, Bufor, Rozmiar+1); lstrcat(Bufor, "web"); // sklej napisy Cały myk sprowadza się do tego, żeby zarezerować w buforze miejsce na dwa stringi: ten z okna i ten który chcesz dąłączyć. Funkcja lstrcat dokleja string podany jako drugi argument, do stringa będącego argumentem pierwszym :]
  14. Nie bardzo rozumiem o co ci chodzi... Aplikacja nie będzie widoczna w trayu, jeżeli jej sam tam nie dodasz. Jeślii chcesz stworzyć program, który nigdzie nie będzie widoczny podczas pracy (ani w trayu, ani na pasku zadań), to po prostu nie twórz mu okna (ew. ukryj je funkcją ShowWindow(hwnd, SW_HIDE).
  15. Teoretycznie można by też przy pomocy SetWindowLong ustawiać i usuwać styl odpowiedzialny za wyświetlanie bitmapy na przyciku (bodajże BS_BITMAP, albo coś w tym stylu :P)... Ale podobnie jak codeguy nie testowłem tego sposobu - tak mi spontanicznie do glowy przyszlo, jako alternatywa...
×
×
  • Utwórz nowe...