
Cipher
Członkowie-
Postów
0 -
Dołączył
-
Ostatnio
Nigdy
Cipher's Achievements
Newbie (1/14)
0
Reputacja
-
Jeżeli dobrze zrozumiałem to funkcja sizeof() powinna być pomocna. Po prostu dzielisz rozmiar całej tablicy przez rozmiar pojedyńczego elementu. Przykład: int ileElementow; char tablica[]="Jakas tablica"; ileElementow=sizeof(tablica)/sizeof(tablica[0]);
-
Na Delphi się nie znam więc wierze na słowo. Jeżeli chodzi o C++ to zawsze możesz skorzystać ze słowa kluczowego extern które poinformuje kompilator o istnieniu zmiennej zadeklarowanej w innym pliku. Przykład: //Plik zmienna.h. #ifndef ZMIENNA_H #define ZMIENNA_H extern int zmienna; #endif //Plik zmienna.cpp #include "zmienna.h" int zmienna=5; //Plik main.cpp #include <iostream> #include "zmienna.h" using namespace std; int main() { cout<<zmienna<<endl; system("pause"); return 0; } Myśle że nie ma co wyjaśniać, wszystko powinno być jasne.
-
Z DevCpp nie kożystam jednak wydaje mi się że problem polega na tym iż w pliku nagłówkowyn masz umieszczone deklaracje zmiennych oraz definicje ciał funkcji. Gdy później dany plik nagłówkowy dołączasz w kilku innych plikach projektu to następuje zjawisko podwujnej definicji. Zasada jest prosta: NIE WOLNO definiować ciał funkcji w plikach nagłówkowych. NIE WOLNO umieszczać deklaracji zmiennych w plikach nagłówkowych. I nic tu nie pomogą dyrektywy #ifndef i #define. Podobny temat dotyczący jednak visual C++ był już niedawno na tym forum o tu https://www.winapi.org/forum/viewtopic.php?t=725 Jeżeli będziesz miał jeszcze jakieś pytania to wal śmiało.
-
Miałem coś takiego przy jednym programie że na Win 98 działał dobrze a na Win 2000 profesional wywalał mi właśnie taką komende.
-
Niestety na Delphi się nie znam i nie wiem za bardzo do czego służy Align. Jednak z Twego opisu wnioskuje iż chodzi Ci o to aby kontrolki zachowywały swoje proporcje (położenie) w stosunku do rozmiaru okna. Jeżeli tak to może spróbuj w ten sposób (przykład z przyciskiem): double xPrawy; double yPrawy; double xLewy; double yLewy; //.... //.... case WM_CREATE: hButton=CreateWindow("button","Przycisk",WS_CHILD|WS_VISIBLE,(int)xLewy,(int)yLewy,(int)xPrawy,(int)yPrawy,hWnd,(HMENU)100,GetModuleHandle(NULL),NULL); break; //.... //.... case WM_SIZE: xPrawy=(LOWORD(lParam))*0.225; yPrawy=(HIWORD(lParam))/20; xLewy=LOWORD(lParam)/40; yLewy=HIWORD(lParam)/40; MoveWindow(hButton,(int)xLewy,(int)yLewy,(int)xPrawy,(int)yPrawy,TRUE); break; Ok co się tam dzieje. W LOWORD(lParam) masz szerokość okna a w HIWORD(lParam) wysokość. Przy założeniu że okno główne ma rozmiary 400x400 przycisk będzie się znajdował w pozycji 10x10 bo xLewy=LOWORD(lParam)/40 (co daje 400/40=10) i yLewy=HIWORD(lParam)/40. Będzie miał rozmiar 90x100 bo xPrawy=(LOWORD(lParam))*0.225 (co daje 400*0.225=90) i yPrawy=(HIWORD(lParam))/20 (co daje 400/20=20). Po zmianie rozmiarów okna głównego wyniki tych działań ulegną zmianie a co za tym idzie zmieni się rozmiar i położenie przycisku jednak proporcje względem okna zostaną zachowane. Nie wiem jednak czy o to ci chodziło, jeżeli nie to napisz. Może pomyśli się coś innego.
-
1)Tworzenie statica: CreateWindow("static","Napis w staticku",WS_CHILD|WS_VISIBLE,10,10,100,30,hWnd,NULL,hInstance,NULL); 2) Musisz chyba dołączyć do projektu biblioteke comctl32.lib. #pragma comment(lib,"comctl32.lib")
-
Przejrzałem to tak pobieżnie i funkcja send serwera powinna chyba zamiast m_socket mieć AcceptSocket. Poza ty funkcje accept zamiast w pętli while dałbym w FD_ACCEPT. To tyle na razie. Dziś niedziela i święto (dwa w jednym (dzień przeciwłupierzowy :D )) i nie bardzo chce mi się analizować ten kod dokładnie, jeżeli te drobne uwagi nie pomogą to jutro po południu przejże ten kod dokładniej i może napisze coś więcej.
-
Wydaje mi się że musiałeś gdzieś zrobić jakiś błąd. Szkoda że nie dałeś fragmentu kodu. Jak masz już socketa w trybie asynchronicznym czyli: WSAAsyncSelect(socket,uchwyt,WM_USER,FD_CONNECT|FD_READ|FD_WRITE); Parametry: 1- nasz socket 2- uchwyt okna programu 3- komunikat wewnątrz którego chcesz odbierać informacje od socketa (w tym wypadku WM_USER ale może być dowolny) 4- flagi mówiące o jakich zdarzeniach chcemy być informowani To dalej dajesz: case WM_USER: switch(WSAGETSELECTEVENT(lParam)) { //coś przyszło case FD_READ: //tu odbierasz to co przyszło break; //łączenie z serwerem case FD_CONNECT: //Tu próba łączenia z serwerem break; } break; I powinno działać. Oczywiście przykład ten dotyczy klienta. W serwerze zamiast FD_CONNECT (do łączenia) musisz obsłużyć FD_ACCEPT (do akceptowania połączenia). Jeżeli to nie działa to zapodaj kod źródłowy (fragmenty), to coś się pomyśli bo tak bez kodu to troche trudno coś doradzić.
-
Może zapomniałeś dodać do projektu odpowiednie pliki .lib .
-
A ja zapodam coś takiego www.koders.com Jest to wyszukiwarka kodów źródłowych. Myśle że może być pomocna.
-
Szczerze mówiąc nie wiem dlaczego Ci się ten podział nie podoba ale jeżeli koniecznie chcesz mieć to w jednym pliku to może użyj dla funkcji specyfikatora inline. Po krótce mówiąc spowoduje on że kompilator będzie traktował takie funkcje jak by były zdefiniowane wewnątrz klasy a co za tym idzie nie powinno być z nimi problemu. Przykład: //klasa2.h class klasa2 { inline void funkcja(void); } void klasa2::funkcja(void) { } ps. Pragnę zaznaczyć że nie polecam stosowania tego sposobu. Ma on po prostu wiele wad i nie jest mile widziany przez programistów.
-
Dobra praktyka programistycza mówi że nie powinno się definiować funkcji w plikach nagłówkowych. Dlaczego? To chyba już wiesz. Może zrób to w taki sposób: //klasa1.h class klasa1 { void funkcja(void) {} }; ---------------------------------------------------------- //klasa2.h class klasa2 { void funkcja(void); } ---------------------------------------------------------- //klasa2.cpp #include "klasa2.h" void klasa2::funkcja(void){} ---------------------------------------------------------- Jak widzisz funkcja z klasy klasa2 jest definiowana w pliku klasa2.cpp. Teraz możesz bez problemu dołączać plik klasa2.h tyle razy ile tylko chcesz i nie powinno być żadnych problemów. Pliki klasa2.h i klasa2.cpp stanowią w tym wypadku komplet. Jak widzisz twój plik klasa2.h został rozłożony na dwa mniejsze. Jeżeli ten opis jest mało zrozumiały to napisz postaram się opisać to szerzej.
-
Być może źle zrozumiałem problem ale nie bardzo wiem dlaczego nie możesz zainkludować tam tych plików.
-
Ja kiedyś zmieniałem rozdzielczość i ilość koloru w ten sposób : DEVMODE dm; //Struktura DEVMODE memset(&dm,0,sizeof(dm)); //Zerujemy strukture dm.dmSize=sizeof(dm); //Pobieramy jej rozmiar dm.dmBitsPerPel=16; //Ile bitowy kolor dm.dmPelsWidth=640; //Jaka szerokość ekranu (pixele) dm.dmPelsHeight=480; //Jaka wysokość ekranu (pixele) dm.dmFields=DM_BITSPERPEL|DM_PELSHEIGHT|DM_PELSWIDTH; //Kombinacja flag mówiących //które pola struktury wypełniliśmy ChangeDisplaySettings(&dm,CDS_UPDATEREGISTRY); //Funkcja zmienia nam ustawienia na te podane w strukturze DEVMODE.