//Plik gener.cpp #include #include #include #include #include #include #include #include #include "simps.cpp" #include "rozklady.cpp" #include "uni.c" #include "tezuka.c" #include "gener.h" #include "wykres.cpp" #include "panel.cpp" #include "test.cpp" # pragma argsused int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // Określenie klasy okna wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(hInstance, "IKONA"); wc.hCursor = LoadCursor(NULL, IDC_ARROW ); wc.hbrBackground = GetStockObject(LTGRAY_BRUSH ); wc.lpszMenuName = "menu1"; wc.lpszClassName = lpszAppName; // Zarejestrowanie klasy okna if(RegisterClass(&wc) == 0) return FALSE; // Stworzenie głównego okna aplikacji int xScreen = GetSystemMetrics ( SM_CXSCREEN ); int yScreen = GetSystemMetrics ( SM_CYSCREEN ); HMENU hMenu = LoadMenu(hInstance, "menu1"); hWnd = CreateWindow(lpszAppName,"Generator liczb losowych.",WS_OVERLAPPEDWINDOW, xScreen/2-320, yScreen/2-240, 640, 480, NULL,hMenu, hInstance, NULL); // Wyjście, jeśli nie powiodło się utworzenie okna if(hWnd == NULL) return FALSE; hInst=hInstance; // Wyświetlenie okna ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); //odczyt scieżki na dysku do pliku help help_dysk=getdisk(); getcwd(help_dir, MAXPATH); dlgProcPrzedzialy = MakeProcInstance ( (FARPROC)TestProc, hInst ); hDnd=CreateDialog(hInst,"Przedzialy" ,hWnd,dlgProcPrzedzialy); if(hDnd == NULL) return FALSE; ShowWindow(hDnd,nCmdShow); ShowWindow(hDnd, SW_HIDE ); // Przetwarzanie komunikatów aż do momentu zakończenia działania aplikacji while( GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } //------------------------------------------------------- // Procedura okna, obsługuje wszystkie komunikaty skierowane do tego okna #pragma argsused LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { static HINSTANCE praca; static PAINTSTRUCT ps; hDC = GetDC(hWnd); switch (message) { // Utworzenie okna case WM_CREATE: praca = ((LPCREATESTRUCT)lParam)->hInstance; font1.lfHeight = 18; font1.lfWidth = 18; font1.lfEscapement = 0; font1.lfOrientation = 0; font1.lfWeight = 300; font1.lfItalic = TRUE; font1.lfUnderline = FALSE; font1.lfStrikeOut = FALSE; font1.lfCharSet = DEFAULT_CHARSET; font1.lfOutPrecision = OUT_DEFAULT_PRECIS; font1.lfClipPrecision = CLIP_DEFAULT_PRECIS; font1.lfQuality = DEFAULT_QUALITY; font1.lfPitchAndFamily = FIXED_PITCH | FF_SWISS; strcpy((char *)font1.lfFaceName, "System"); hfont1 = CreateFontIndirect( &font1); combo1 = CreateWindow("COMBOBOX", rozklad[1], CBS_DROPDOWN |WS_CHILD | WS_VISIBLE|CBN_SELCHANGE , 10,40,120,150, hWnd, (HMENU)ID_COMBO1, praca, NULL); for(int i1=0;i1<6;i1++) SendMessage(combo1, CB_ADDSTRING, 0,(LPARAM)( rozklad[i1])); SendMessage(combo1,CB_SETCURSEL ,1,0); edit1=CreateWindow("EDIT","10",DEFINE_EDIT , 170, 10, 35, 22, hWnd,(HMENU) NULL, praca,NULL); edit2=CreateWindow("EDIT","1",DEFINE_EDIT , 170, 45, 35, 22, hWnd,(HMENU)NULL, praca, NULL); combo2 = CreateWindow("COMBOBOX", "", CBS_DROPDOWN | WS_CHILD | WS_VISIBLE|CBN_SELCHANGE, 230,39,90,150, hWnd, (HMENU)ID_COMBO2, praca, NULL); SendMessage(combo2, CB_ADDSTRING, 0,(LPARAM)("uni( )")); SendMessage(combo2, CB_ADDSTRING, 0,(LPARAM)("combT( )")); SendMessage(combo2, CB_ADDSTRING, 0,(LPARAM)("random( )")); SendMessage(combo2, CB_ADDSTRING, 0,(LPARAM)("rand( )")); SendMessage(combo2,CB_SETCURSEL ,0,0); edit3=CreateWindow("EDIT","1000",DEFINE_EDIT, 340, 40, 45, 22, hWnd,(HMENU)NULL, praca, NULL); button1=CreateWindow("BUTTON","Generuj",WS_CHILD|WS_VISIBLE, 400,40,60,22, hWnd,(HMENU)ID_BUTTON1, praca,NULL ); edit4=CreateWindow("EDIT","10",DEFINE_EDIT, 500, 40, 35, 22, hWnd,(HMENU)NULL, praca, NULL); button2=CreateWindow("BUTTON","Ustaw",WS_CHILD|WS_VISIBLE, 560,40,50,22, hWnd,(HMENU)ID_BUTTON2, praca,NULL ); list1=CreateWindow("LISTBOX", "", WS_BORDER|LBS_DISABLENOSCROLL| WS_VSCROLL | WS_CHILD | WS_VISIBLE|ES_LEFT|WS_TABSTOP , 10,100,130,360, hWnd, NULL, praca, NULL); rstart(12,34,56,78); init(33333,255,55567890); randomize(); GetClientRect(hWnd,&windowRect); panelRect=Rect(0,0,windowRect.right,windowRect.bottom); wykresRect=Rect(150,80,windowRect.right-1,windowRect.bottom-1); panelDC = CreateCompatibleDC(hDC); wykresDC = CreateCompatibleDC(hDC); theBitmapW = CreateCompatibleBitmap(hDC,1000,380); SelectObject(wykresDC,theBitmapW); SelectObject(wykresDC, hfont1); SetBkMode(wykresDC,TRANSPARENT); theBitmapP = CreateCompatibleBitmap(hDC,panelRect.right-panelRect.left, panelRect.bottom-panelRect.top); SelectObject(panelDC,theBitmapP); hpen0 = CreatePen(PS_SOLID, 3, RGB( 0, 0, 0) );//czarny hpen1 = CreatePen(PS_SOLID, 2, RGB( 0, 0,255) );//niebieski hbr0 = CreateSolidBrush( RGB(200,200,200) );//szary hbr11 = CreateSolidBrush(RGB(255,255,255) );//biały hbr1 = CreateSolidBrush( RGB(255, 0, 0) );//czerwony hbr2 = CreateSolidBrush( RGB(0 ,255, 0) );//zielony hbr3 = CreateSolidBrush( RGB(255,255, 0) );//żółty hbr4 = CreateSolidBrush( RGB( 0, 0,255) );//niebieski EnableWindow(edit2,FALSE); Rozklad=R_student; Generuj(); break; // Zamykanie okna case WM_DESTROY: DeleteDC(panelDC); DeleteDC(wykresDC); DeleteObject(theBitmapW); DeleteObject(theBitmapP); DestroyWindow(combo1);DestroyWindow(combo2);DestroyWindow(edit1); DestroyWindow(edit2);DestroyWindow(edit3);DestroyWindow(edit4); DestroyWindow(button1);DestroyWindow(button2);DestroyWindow(list1); DestroyWindow(edit); DeleteObject(hpen0);DeleteObject(hpen1); DeleteObject(hbr0);DeleteObject(hbr11);DeleteObject(hbr1); DeleteObject(hbr2);DeleteObject(hbr3);DeleteObject(hbr4); PostQuitMessage(0); break; // Zmiana rozmiaru okna case WM_SIZE: GetClientRect(hWnd,&windowRect); panelRect=Rect(0,0,windowRect.right,windowRect.bottom); wykresRect=Rect(145,80,windowRect.right-2,windowRect.bottom-2); DeleteObject(theBitmapP); theBitmapP = CreateCompatibleBitmap(hDC,panelRect.right-panelRect.left, panelRect.bottom-panelRect.top); SelectObject(panelDC,theBitmapP); MoveWindow(list1,10,105,130,windowRect.bottom-windowRect.top-100,1); MalujPanel(); MalujWykres(); // ReleaseDC (hWnd, hDC); InvalidateRect(hWnd,NULL,TRUE); break; // Funkcja rysująca. case WM_PAINT: hDC=BeginPaint(hWnd,&ps); BitBlt(hDC,panelRect.left,panelRect.top, panelRect.right-panelRect.left,panelRect.bottom-panelRect.top, panelDC, 0, 0, SRCCOPY); StretchBlt(hDC,wykresRect.left,wykresRect.top, wykresRect.right-wykresRect.left,wykresRect.bottom-wykresRect.top, wykresDC, 0, 0,1000,380 , SRCCOPY); EndPaint(hWnd, &ps); break; //Obsługa przycisków case WM_COMMAND: switch(LOWORD(wParam)) { case ID_MENU_H_AUTOR: dlgProc = (DLGPROC) MakeProcInstance ( (FARPROC)AutorProc, hInst ); DialogBox ( hInst, "AutorBox", hWnd, dlgProc ); FreeProcInstance ( (FARPROC) dlgProc ); break; case ID_MENU_H_PROGRAM: dlgProc = (DLGPROC) MakeProcInstance ( (FARPROC)HelpProc, hInst ); DialogBox ( hInst, "HelpBox", hWnd, dlgProc ); FreeProcInstance ( (FARPROC) dlgProc ); break; case ID_MENU_KONIEC: PostMessage(hWnd, WM_CLOSE, 0, 0L); break; case ID_MENU_Z_G: dlgProc = (DLGPROC) MakeProcInstance((FARPROC)FileProc, hInst); DialogBox ( hInst, "FILEDIALOG", hWnd, dlgProc); FreeProcInstance ( (FARPROC) dlgProc ); if(nazwa_pliku[0]!=0) SaveDialog(1); break; case ID_MENU_Z_D: dlgProc = (DLGPROC) MakeProcInstance((FARPROC)FileProc, hInst); DialogBox ( hInst, "FILEDIALOG", hWnd, dlgProc); FreeProcInstance ( (FARPROC) dlgProc ); if(nazwa_pliku[0]!=0) SaveDialog(2); break; case ID_MENU_Z_LOS: dlgProc = (DLGPROC) MakeProcInstance((FARPROC)FileProc, hInst); DialogBox ( hInst, "FILEDIALOG", hWnd, dlgProc); FreeProcInstance ( (FARPROC) dlgProc ); if(nazwa_pliku[0]!=0) SaveDialog(3); break; case ID_MENU_Z_TEST: dlgProc = (DLGPROC) MakeProcInstance((FARPROC)FileProc, hInst); DialogBox ( hInst, "FILEDIALOG", hWnd, dlgProc); FreeProcInstance ( (FARPROC) dlgProc ); if(nazwa_pliku[0]!=0) SaveDialog(4); break; case ID_TESTOWANIE: ShowWindow(hDnd, SW_RESTORE ); break; case ID_BUTTON1: Generuj(); break; case ID_BUTTON2: SendMessage(edit4,WM_GETTEXT,5,(LPARAM)buf); j=atof(buf); if(j<1|j>500) { Error("Parametr musi być ' >=1 <500 '","Błąd danych"); SetFocus(edit4); } else il_przedz=j; sprintf(buf,"%d",il_przedz); strncpy(buf1, buf, 4); SendMessage(edit4,WM_SETTEXT,0,(LPARAM)buf1); ustPrzedz(); MalujPanel(0); MalujWykres(); InvalidateRect(hWnd,NULL,TRUE); break; case ID_COMBO1: //dla nowszych bibliotek niż BC 3.1 należy ustawic // if(HIWORD(wParam)!=LBN_SELCHANGE ) break; if(HIWORD(lParam)!=LBN_SELCHANGE ) break; switch((int)SendMessage(combo1,CB_GETCURSEL,0,0)) { case 1: case 2: EnableWindow(edit2,FALSE); break; case 0: case 3: case 4: case 5: EnableWindow(edit2,TRUE); break; } break; case ID_COMBO2: //dla nowszych bibliotek niż BC 3.1 należy ustawic // if(HIWORD(wParam)!=LBN_SELCHANGE ) break; if(HIWORD(lParam)==LBN_SELCHANGE ) typ_los=(int)SendMessage(combo2,CB_GETCURSEL,0,0); break; } break; // Domyślna obsługa wszystkich nieprzetwarzanych komunikatów default: return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0); } //koniec funkcji WndProc(...) //----------------------------------------------------------- void Generuj() { SetCursor(LoadCursor(NULL, IDC_WAIT )); SendMessage(edit3,WM_GETTEXT,7,(LPARAM)buf); i=atof(buf); if(i<1 || i>5000) { Error("Ilość liczb losowych musi być ' 1 < n < 5000 '","Błąd danych"); sprintf(buf,"%d",il_los); strncpy(buf1, buf, 7); SendMessage(edit3,WM_SETTEXT,0,(LPARAM)buf1); SetFocus(edit3); return; } il_los=i; //-------- SendMessage(edit4,WM_GETTEXT,7,(LPARAM)buf); i=atof(buf); if(i<1 || i>500) { Error("Ilość przedziałów musi być mniejsza od\n500 i większa od 0", "Błąd danych"); sprintf(buf,"%d",il_przedz); strncpy(buf1, buf, 7); SendMessage(edit4,WM_SETTEXT,0,(LPARAM)buf1); SetFocus(edit4); return; } il_przedz=i; //-------- switch((int)SendMessage(combo1,CB_GETCURSEL,0,0)) { case 0: Rozklad=R_normalny; if(!FunkcjaEdit(edit1,¶metr1,-1,'d')) return; if(!FunkcjaEdit(edit2,¶metr2,1,'d')) return; break; case 1: Rozklad=R_student; if(!FunkcjaEdit(edit1,¶metr1,1,'i')) return; if(parametr1>250) { Error("Wartość parametru za duża: 'a < 250'","Błąd danych."); SetFocus(edit1); return; } break; case 2: Rozklad=R_chi_kwadrat; if(!FunkcjaEdit(edit1,¶metr1,1,'i')) return; if(parametr1>200) { Error("Wartość parametru za duża: 'a < 200'","Błąd danych."); SetFocus(edit1); return; } break; case 3: Rozklad=R_snedecor; if(!FunkcjaEdit(edit1,¶metr1,1,'i')) return; if(!FunkcjaEdit(edit2,¶metr2,1,'i')) return; if(parametr1/parametr2>50) { Error("Za duża różnica między parametrami!","Błąd danych."); SetFocus(edit2); return; } break; case 4: Rozklad=R_beta; if(!FunkcjaEdit(edit1,¶metr1,1,'d')) return; if(!FunkcjaEdit(edit2,¶metr2,1,'d')) return; if(parametr1<0.5||parametr2<0.5||parametr1-parametr2>30) { Error("Zbyt skrajne parametry!","Błąd danych."); SetFocus(edit2); return; } break; case 5: Rozklad=R_cauchy; if(!FunkcjaEdit(edit1,¶metr1,-1,'d')) return; if(!FunkcjaEdit(edit2,¶metr2,1,'d')) return; break; } //-------- int Er=0; static double par1,par2,(*Rozk)(double,double*,double*); Pasek(1); if(Rozk!=Rozklad || par1!=parametr1 || par2!=parametr2) { Rozk=Rozklad; par1=parametr1; par2=parametr2; switch((int)SendMessage(combo1,CB_GETCURSEL,0,0)) { case 0: //normalny ObliczGestosc(par1,0.0005/par2); Er=ObliczDystrybuante(par1,0.01); break; case 1: //student ObliczGestosc(0,0.001); Er=ObliczDystrybuante(0,1); break; case 2: //R_chi_kwadrat; ObliczGestosc(par1,0.001/par1); Er=ObliczDystrybuante(par1,1,2); break; case 3: //snedecor if(par1>2&&par2>2) { ObliczGestosc(par2/(par2-2),0.0001*(par1)); Er=ObliczDystrybuante(par2/(par2-2),1,2); } else { ObliczGestosc(1,0.001); Er=ObliczDystrybuante(1,1,2); } break; case 4: //beta ObliczGestosc(0.5,0.0001); Er=ObliczDystrybuante(0.5,0.0001,2); break; case 5: //cauchy ObliczGestosc(par1,0.001/par2); Er=ObliczDystrybuante(par1,1); break; } } else Pasek(1); SendMessage(list1, LB_RESETCONTENT, 0, 0); //losowanie i zapis do tablicy i ListBox1 for(i=0;iWykr_Dystrybuanty[i1].y&& i10) { sprintf(buf,"W obliczeniach całki pojawiły się %d błędy ",Er); Error(buf, "Błąd obliczeń"); } SetCursor(NULL); } //---------------------------------------------------------------------------- void sortowanie() { int i0,i1,adr; double pom; for (i0=0 ;i0tablLosowa[i1]) adr=i1; if (adr>i0) { pom=tablLosowa[i0]; tablLosowa[i0]=tablLosowa[adr]; tablLosowa[adr]=pom; } } } //---------------------------------------------------------------------------- void ustPrzedz() { double max,min, dx; int n; min=tablLosowa[0]; max=tablLosowa[il_los-1]; dx=(max-min)/il_przedz; i1=0; for (i=0 ;i6.1e-7 ); skok=2e-6*(kon); if(Rozklad==R_student&¶metr1<5||Rozklad==R_cauchy&¶metr2>=1) skok*=0.01; b=miejsce; Wykr_Dystrybuanty[499].x=miejsce; Wykr_Dystrybuanty[499].y=0.5; for(i=1;i<500;i++) { n=0; dys0=0.001*i; do { a=b; b+=skok; ddys=CalkaSimpsN(a,b,10,Rozklad,¶metr1,¶metr2); dys+=ddys; }while(dys2e-11 ); skok=1e-4*kon; if(parametr2==1 && Rozklad==R_snedecor) {kon*=100;skok*=100;} a=kon; for(i=0;i<=1000;i++) { n=0; dys0=0.001*i; do { b=a; a-=skok; ddys=CalkaSimpsN(a,b,20,Rozklad,¶metr1,¶metr2); dys+=ddys; n++; }while(dys0&&n<1000000); if(a<0) Err++; if(i<2) skok*=0.1; else { if(parametr2<3 && Rozklad==R_snedecor) { if(n>400) skok*=5; if(n<200) skok/=20; } else { if(n>100) skok*=3; if(n<50) skok/=5; } } Wykr_Dystrybuanty[1000-i].y=dys; Wykr_Dystrybuanty[1000-i].x=a; Pasek(0.08); } nWykrDystrybuanty=i-1; } SetCursor(NULL); return Err; } //---------------------------------------------------------------------------- void ObliczGestosc(double miejsce,double minimum) { double dj,pocz,kon; SetCursor(LoadCursor(NULL, IDC_WAIT )); pocz=miejsce; do { pocz-=0.1; }while(Rozklad(pocz,¶metr1,¶metr2)>minimum ); kon=miejsce; do { kon+=0.1; }while(Rozklad(kon,¶metr1,¶metr2)>minimum); //dla rozkładów występujących z prawej strony układu współżędnych //przesunięcie osi Oy w prawo. if(Rozklad==R_chi_kwadrat||Rozklad==R_beta||Rozklad==R_snedecor) pocz-=kon*0.05; dj=((kon-pocz)/1000); Pasek(1); for(i=0;i<1000;i++) { Wykr_Gestosci[i].y= Rozklad(pocz,¶metr1,¶metr2); Wykr_Gestosci[i].x=pocz; pocz+=dj; } Pasek(2); SetCursor(NULL); } //-------------------------------------------------------- BOOL FunkcjaEdit(HWND hw,double *param,int noZero,char IntDouble) { SendMessage(hw,WM_GETTEXT,5,(LPARAM)buf); j=atof(buf); if(IntDouble=='i' && j>(int)(j)) { j=(int)(j); Error("Parametr musi być liczbą całkowitą.","Błąd danych"); SetFocus(hw); return FALSE; } if(noZero==0 && j<0 ) { Error("Parametr musi być ' >=0 '","Błąd danych"); SetFocus(hw); return FALSE; } else if(noZero>0 && j<=0 ) { Error("Parametr musi być ' >0 '","Błąd danych"); SetFocus(hw); return FALSE; } else (*param)=j; sprintf(buf,"%f",*param); strncpy(buf1, buf, 4); SendMessage(hw,WM_SETTEXT,0,(LPARAM)buf1); return TRUE; } //------------------------------------------------ void SaveDialog(int co) { FILE *fil=NULL; char typ_rozk[200]; if(Rozklad==R_normalny) sprintf(typ_rozk,"Rozkład Normalny N(%.3f;%.3f)\n",parametr1,parametr2); if(Rozklad==R_student) sprintf(typ_rozk,"Rozkład t -Studenta t(%.0f) \n",parametr1); if(Rozklad==R_chi_kwadrat) sprintf(typ_rozk,"Rozkład chi -kwadrat x(%.0f) \n",parametr1); if(Rozklad==R_beta) sprintf(typ_rozk,"Rozkład beta B(%.3f;%.3f) \n",parametr1,parametr2); if(Rozklad==R_snedecor) sprintf(typ_rozk,"Rozkład F Snedecora F(%.3f;%.3f) \n",parametr1,parametr2); if(Rozklad==R_cauchy) sprintf(typ_rozk,"Rozkład Cauchy'ego C(%.0f %.0f) \n",parametr1,parametr2); switch(co) { case 1: fil=fopen(nazwa_pliku,"w"); if(fil==NULL) break; fprintf(fil,"Wykres gęstości\n"); fprintf(fil,"%s\n",typ_rozk); fprintf(fil," lp. x y\n"); for(i=0;i<1000;i++) fprintf(fil,"%4d %15f %6.5f \n",i+1,Wykr_Gestosci[i].x,Wykr_Gestosci[i].y); fclose(fil); break; case 2: fil=fopen(nazwa_pliku,"w"); if(fil==NULL) break; fprintf(fil,"Wykres dystrybuanty\n"); fprintf(fil,"%s\n",typ_rozk); if(Rozklad==R_student) { fprintf(fil,"t'(0.01) =(t'(0.005)+t'(0.995))/2 = %5.3f \n", (double)0.5*(-Wykr_Dystrybuanty[4].x+Wykr_Dystrybuanty[994].x)); fprintf(fil,"t'(0.02) = (t'(0.01)+t'(0.99))/2 = %5.3f \n", (double)0.5*(-Wykr_Dystrybuanty[9].x+Wykr_Dystrybuanty[989].x)); fprintf(fil,"t'(0.1) = (t'(0.05)+t'(0.95))/2 = %5.3f \n", (double)0.5*(-Wykr_Dystrybuanty[49].x+Wykr_Dystrybuanty[949].x)); fprintf(fil,"t'(0.5) = (t'(0.25)+t'(0.75))/2 = %5.3f \n", (double)0.5*(-Wykr_Dystrybuanty[249].x+Wykr_Dystrybuanty[749].x)); } fprintf(fil," lp. x y\n"); for(i=0;ibsize*4,1 , fil); fclose(fil); for(i=0;i 3'","Błąd danych."); SetFocus(edit4); break; } if(il_przedz>150) { Error("Za duża ilość przedziałów: '< 150'","Błąd danych."); SetFocus(edit4); break; } test_zgodnosci(j); } break; case 107: //wyczysc SendMessage(edit, LB_RESETCONTENT, 0, 0); break; case 108: case WM_DESTROY: ShowWindow(hWndd, SW_HIDE ); InvalidateRect(hWnd,NULL,TRUE); break; } break; default: return 0; } return ( FALSE ); } //============================================== //procedura odpowiedzialna za obsługę okna 'Zapis do pliku' #pragma argsused BOOL CALLBACK FileProc( HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam ) { HWND hw; //tymczasowy wskaznik okna ffblk ff; int done; int save, disk, disks; char dir[MAXPATH]; int dysk0; switch ( message ) { case WM_INITDIALOG: getcwd(dir, MAXPATH); sprintf(buf1,"Ścieżka: %s ",dir); SendMessage(GetDlgItem(hDlg, 101),WM_SETTEXT,0,(LPARAM)buf1); dysk0= getdisk(); for (disk = 0;disk < 10;disk++) { setdisk(disk); if (disk == getdisk()) { sprintf(buf1,"%c:\\",(char)(disk + 'a')); SendMessage(GetDlgItem(hDlg, 105), LB_ADDSTRING, 0,(LPARAM)buf1 ); } } setdisk(dysk0); chdir(dir); if(findfirst("*.*", &ff, FA_DIREC)==0) do{ if (ff.ff_attrib == FA_DIREC&& !(ff.ff_name[0]=='.'&&ff.ff_name[1]!='.')) SendMessage(GetDlgItem(hDlg, 105), LB_ADDSTRING, 0,(LPARAM)ff.ff_name ); } while (findnext(&ff) == 0); if(findfirst( "*.txt",&ff,0)==0) do{ SendMessage(GetDlgItem(hDlg, 103), LB_ADDSTRING, 0,(LPARAM)ff.ff_name ); } while (findnext(&ff) == 0); return ( TRUE ); case WM_COMMAND: switch (LOWORD(wParam) ) { case 109: case IDCANCEL: nazwa_pliku[0]=0; EndDialog ( hDlg, TRUE ); return ( TRUE ); case 103: //dla nowszych bibliotek niż BC 3.1 należy ustawic // if(HIWORD(wParam)!=LBN_SELCHANGE ) break; if(HIWORD(lParam) !=LBN_SELCHANGE) break; hw=GetDlgItem(hDlg, 103); i=(int) SendMessage(hw, LB_GETCURSEL, 0,0); SendMessage(hw, LB_GETTEXT,i,(LPARAM)buf); SendMessage(GetDlgItem(hDlg, 107),WM_SETTEXT,0,(LPARAM)buf); break; case 105: //dla nowszych bibliotek niż BC 3.1 należy ustawic // if(HIWORD(wParam)!=LBN_DBLCLK) break; if(HIWORD(lParam)!=LBN_DBLCLK) break; hw=GetDlgItem(hDlg, 105); SendMessage(hw, LB_GETTEXT,(int) SendMessage(hw, LB_GETCURSEL, 0,0),(LPARAM)buf1); sprintf(dir,"\%s",buf1); if(buf1[1]==':') { dysk0=(int)(buf1[0]-'a'); setdisk(dysk0); } chdir(buf1); getcwd(dir, MAXPATH); sprintf(buf1,"Ścieżka: %s\\",dir); SendMessage(GetDlgItem(hDlg, 101),WM_SETTEXT,0,(LPARAM)((LPSTR) buf1)); SendMessage(hw, LB_RESETCONTENT, 0, 0); for (disk = 0;disk < 10;disk++) { setdisk(disk); if (disk == getdisk()) { sprintf(buf1,"%c:\\",(char)(disk + 'a')); SendMessage(hw, LB_ADDSTRING, 0,(LPARAM)buf1 ); } } setdisk(dysk0); chdir(dir); if(findfirst("*.*", &ff, FA_DIREC)==0) do{ if (ff.ff_attrib & FA_DIREC) if (ff.ff_attrib == FA_DIREC&& !(ff.ff_name[0]=='.'&&ff.ff_name[1]!='.')) SendMessage(hw, LB_ADDSTRING, 0,(LPARAM)ff.ff_name ); } while (findnext(&ff) == 0); SendMessage(GetDlgItem(hDlg, 103), LB_RESETCONTENT, 0, 0); if(findfirst( "*.txt",&ff,0)==0) do{ SendMessage(GetDlgItem(hDlg, 103), LB_ADDSTRING, 0,(LPARAM)ff.ff_name ); } while (findnext(&ff) == 0); break; case IDOK: getcwd(dir, MAXPATH); SendMessage(GetDlgItem(hDlg, 107),WM_GETTEXT,MAXFILE,(LPARAM)buf1); if(!strncmp( buf1,"",1)) nazwa_pliku[0]=0; else sprintf(nazwa_pliku,"%s\\%s",dir,buf1); EndDialog ( hDlg, TRUE ); break; } break; } return ( FALSE ); } //------------------------------------------------------------------------- double Pasek(double a) { static double pasek=0; if(a>=0) { if(a==0)pasek=0; else pasek+=a; if(pasek>0 && pasek<100) { FillRect(hDC,&Rect(120,20,120+420,50),hbr2); FillRect(hDC,&Rect(120+10,25,120+10+pasek*4,45),hbr4); } sprintf(buf1,"%3.0f",pasek*10); TextOut(hDC,120+190,27,buf1,3); } return pasek; }