Naujienos, kurias atneš peržiūros programa

Kol "Apple" miegojo saldžiu sapnu, apkvaitęs nuo laurų kvapų, "Microsoft" nepaliaujamai tobulino vartotojo sąsają, - ir Windows'95 parodė šių pastangų (kalbu tik apie sąsają) sėkmę. Apie Kalėdas pasirodysianti operacinės sistemos ir Internet peržiūros programos hibridas IE 4.0 (žinomas darbiniu "Nashvile" vardu) dar išplės ir patobulins pagrindinius vartotojo sąsajos elementus. Programuotojai kartu su WinInet API gaus galimybę "kepti" programas, naujas galimybes, pvz., segtuvų etiketes. Iš vienos pusės, tai tiesiog paprastas, tačiau "paslėptas" HTML dokumentas, - kiekvienas segtuvas turės "nuosavą" tokį failą. Atveriant segtuvą gausime jau ne įprastą ir sausą Windows'95 failų sąrašą, o WWW puslapį su rėmeliais ("frames"), su nuorodomis į žinynus ir pagalbos tekstus, nuorodomis į kitą susijusią informaciją ar adresus Internet'e.

O tokių segtuvų etikečių rinkinys, įdėtas į darbo stalo ("Desktop") segtuvą, pavirsta "veiksniomis temomis" ("Active Themes"). Tiesiog viskas, ką duodavo Microsoft Plus! Panaudojus ActiveX elementus ekrane galite "išdarinėti" ką tik norite.

Norisi iškart pilti stačia galvą į šį dar karštą vandenį ir aiškintis kaip programuojami nauji elementai. Tačiau "prievaizdai" akylai žiūri, kad straipsniuose nebūtų pernelyg ilgų "makaronų", t.y. programų tekstų intarpų. Tad apsiribosiu tik trumpu papasakojimu.

Pirma, daugelis standartinių elementų (pvz., "TreeView" - medžio tipo sąrašas) leidžia pakeisti savo piešinį. Tą gali ir naujas elementas "CoolBar", - tai naujo tipo įrankių rinkinių (šie rinkiniai vadinami "bands" - ryšuliukai) konteineris. Pavyzdžiui, programa gali turėti "CoolBar" tipo elementą, kuriame yra du ryšuliukai: pirmasis su piešinuku, teksto lauku ir sąrašu pasirinkimui, o antrasis - su piešinuku, tekstu ir mygtuku.

My computer "ComboBoxEx" yra naujas išsiskleidžiantis sąrašas, kuriame galima naudoti piešinukus ir postūmius. Jis labai panašus į Explorer disko pasirinkimo langelį (žr. piešinuką).

Ir pagaliau elementas Datos ir Laiko įvedimui My computer (Date/Time Picker) (žr. piešinuką). Išskleidus Datos elementą, atsiranda kalendorius, kuriame vartotojus gali pasirinkti reikiamą datą, kuri po to perkeliama į redagavimo lauką. Laiko elementas panašus į "aukštyn/žemyn" elementą, žr. piešinuką.

Puikios atsiveria galimybės ir tolimi horizontai, tačiau reikia pagyventi ir diena šiandienine. Tad, nors disko vieta ir pinga, - kaip grybai rudenio - tačiau ne vienas atkreipia dėmesį, kad naujos programos pučiasi kaip varlės prieš lietų. Įvairių gali būti priežasčių, tačiau viena yra aiški - į EXE failą prirašoma daug perteklinės ir nereikalingos informacijos. Išimkime ją - ir programos, ypač smulkios utėlytės, gerokai suplonės.



Kaip suliesėti?

Tad šį kartą pažiūrėsime, kaip sumažinti programų apimtį, kai jos ruošiamos 32-ių bitų C/C++ kompiliatoriais. Ir vis tiek noriu pasakyti pora žodžių, kodėl reikia pasirūpinti programų dydžiu. Pirma, kam be reikalo varginti kompiuterį, pakraunant papildomą kodą. Antra, nors keliasdešimt KB jau nelabai svarbu gigabaitiniame diske, šis kiekis gali turėti įtakos platinant programas diskeliais. O juk dar yra ir Internet, - ir ne visi jį naudoja turėdami greitus modemus bei patikimas linijas.

Tad paimkime ir sutransliuokime pačią mažiausią programą:

int main ()

{ return 0;

}

Visual C++ 4.x su raktais /01 /Fm (minimalus dydis ir pašalinta derinimo informacija) iš jos sukuria 11 KB EXE failą! Nors pati "main" paprogramė tėra 3 baitai. Borland C++ 5.0 šiuos treis baitus "išpučia" net iki 32 KB.

Aha! Pasižiūrėjus "per lupą", paaiškėja, kad pagrindinė šio "mėšlo" dalis sudaryta iš išimčių, atminties, aplinkos ("environment) valdymo funkcijų. Borland prijungia dar teksto išvedimo (fputs, sprintf ir t.t.) funkcijas. Tačiau ar pagrindinėje programoje matėte kreipinis į jas? Ne! Jos paminimos tik programos inicializacijos procedūroje.

Tačiau, jei aš šią procedūrą pašalinsiu, ar programa dirbs korektiškai? Iš tikro, negalima to garantuoti. Tačiau tai dar ne pasaulio pabaiga! Suskirstykime inicializacijos funkcijas į kelias grupes.

Vidinės inicializacijos ir programos užbaigimo funkcijos. Daugeliu atvejų šias funkcijas, pvz., komandų eilutės analizės funkciją, galima pakeisti nuosavomis specializuotomis ir mažesnės apimties funkcijomis.

Vartotojo kviečiamos funkcijos, kurioms yra būtina inicializacija kartais lengvai pakeičiamos kitomis. Pavyzdžiui, vietoje "malloc" tereikia pradėti naudoti "HeapAlloc" funkciją. Taip pat milžiniškos apimties "sprintf" funkcija tiesiog pakeičiama "nieko neužimančia" Windows 32 bitų terpės "wsprintf" funkcija.

Ir pagaliau daug užimančios funkcijos, neturinčios ekvivalentų Win32 API, pvz., "scanf". Na, šiuo atveju, jei nėra būtinybės jos naudoti pilna jėga, galima pasirašyti savo nuosavą specializuotą funkciją.

Tad reikia perrašyti pradinį inicializacijos CRT failą pašalinant nenaudojamas funkcijas. Galite kreiptis E-mail'u, jei norite tokio minimalaus TINYCRT failo Microsoft ir Borland kompiliatoriams:

Kiti principai naudojami mažinant Windows terpės programų apimtį. Jei jus domina šis klausimas, parašykite aukščiau minėtu adresu ir, jei bus susidomėjusių, pratęsiu šią temą.