Zabierałem się raz do pisania tutoriala z jakiejś okazji - niestety, wyszedł trochę... dziwny i o dosyć prostym temacie, ale może i a nóż, widelec ktoś skorzysta(a raczej się pośmieje)
PS.Ostrzegałem!
Rekłirements:
Za kompilator będzie służył MinGW, a z odrobiną wyobraźni można też wykorzystać MS VC++ czy inne cuda
I koniecznie ResEdit - http://www.resedit.net/
1.Prolog
Pan Józef był stróżem na parkingu. Ale jaki to był parking! Kamery, lasery, działka obrotowe i boilery! Nic, tylko siedzieć i rozwiązywać sudoku.
Aby to sobie ułatwić, napisał sobie w C pewien program, mnożący każdą liczbę przez 5
Ale na dłuższą metę pana Józefa wkurzało wprowadzanie nazwy exeka, i numeru, no i w ogóle to jakieś brzydkie wszystko było, czarnawe jakby ktoś przypalił czy ki cholera
Nawet graficzny loader od kumpla ze stróżówki z bloku nieopodal nie załatwił sprawy, bo...A zresztą, sami zobaczcie:
Zmuszony koniecznością, pan Józef postanowił jedno - napisać wersję superprogrammnozacykazdapodanaliczbeprzez5 z GUI.
2.Pierwsze starcie
Jako że Józef potrafił korzystać z google, poszukał trochę i trafił na pierwszy, lepszy kurs winapi.
Ale chwila lektury...
...przyprawiła go o dreszcze. A po cholerę tyle zmiennych?! I skąd te uchwyty?! To kurs na pisanie programu, czy remontowanie łazienki?!
Wtem nasz główny bohater przypomniał sobie, jak jego żona, Bożena, dzisiaj rano rozmawiała przez telefon z koleżanką, i coś chyba wspominała, czy wręcz pouczała koleżankę, że na dialogach podobno łatwiej się gui pisze, ale tak podobno nie wypada...
3.Reaktywacja
Po dwóch chwilach w google i czterech piwach w żołądku pan Józef odkrył o jakie dialogi chodziło jego żonie. I nie był to dialog pomiędzy religiami, narodami, czy **** tam wie kto jeszcze może rozmawiać, ani konkurent tepsy, tylko takie okienko!
Wziął z sieci pierwsze, lepsze, narzędzie(ResEdit!), skonfigurował(podejrzewam że dodadnie folderu "incldue" z kompilatora nie sprawi większości większych trudośći?), dodał dialog(CRTL+D, lub LPM->Add resource..->Dialog), wrzucił kilka kontrolek, pokonfigurował, że wyszło coś takiego:
(Widzicie tą opcję na górze? Jak będziecie się bawić w ustawianie kontrolek, to polecam ją włączyć, wtedy będzie wam automatycznie wyrówynwało do innych kontrolek i do ramki)(tak, wiem że suma summarum nie ma staticbox'a tylko jest disabled editbox,dop.autor)
Potem odpalił edit.com, i z otwartym msdn'em w tle skrobnął taki program:
Następnie nałożył specjalną czapkę dzięki której lepiej mu się pisało w konsoli, odpalił linię poleceń, ustawił patha na mingw\bin, i wziął się za klepanie formułek:
I otrzymał swój wymarzony program:
4.Epilog
I dzięki temu wspaniałemu programowi pan Józef zbił fortunę, ponieważ sporo ludzi zadawało sobie różne dziwne pytania, chociażby jak "A co, gdybym pomnożył swoją datę urodzenia przez 5?". Marzenia tych wszystkich ludzi realizował jeden program - superprogrammnozacykazdapodanaliczbeprzez5 z GUI.
(Tak, wiem, z profesjonalnym artykułem nie ma nic wspólnego )
PS.Ostrzegałem!
Rekłirements:
Za kompilator będzie służył MinGW, a z odrobiną wyobraźni można też wykorzystać MS VC++ czy inne cuda
I koniecznie ResEdit - http://www.resedit.net/
1.Prolog
Pan Józef był stróżem na parkingu. Ale jaki to był parking! Kamery, lasery, działka obrotowe i boilery! Nic, tylko siedzieć i rozwiązywać sudoku.
Aby to sobie ułatwić, napisał sobie w C pewien program, mnożący każdą liczbę przez 5
Ale na dłuższą metę pana Józefa wkurzało wprowadzanie nazwy exeka, i numeru, no i w ogóle to jakieś brzydkie wszystko było, czarnawe jakby ktoś przypalił czy ki cholera
Nawet graficzny loader od kumpla ze stróżówki z bloku nieopodal nie załatwił sprawy, bo...A zresztą, sami zobaczcie:
Zmuszony koniecznością, pan Józef postanowił jedno - napisać wersję superprogrammnozacykazdapodanaliczbeprzez5 z GUI.
2.Pierwsze starcie
Jako że Józef potrafił korzystać z google, poszukał trochę i trafił na pierwszy, lepszy kurs winapi.
Ale chwila lektury...
...przyprawiła go o dreszcze. A po cholerę tyle zmiennych?! I skąd te uchwyty?! To kurs na pisanie programu, czy remontowanie łazienki?!
Wtem nasz główny bohater przypomniał sobie, jak jego żona, Bożena, dzisiaj rano rozmawiała przez telefon z koleżanką, i coś chyba wspominała, czy wręcz pouczała koleżankę, że na dialogach podobno łatwiej się gui pisze, ale tak podobno nie wypada...
3.Reaktywacja
Po dwóch chwilach w google i czterech piwach w żołądku pan Józef odkrył o jakie dialogi chodziło jego żonie. I nie był to dialog pomiędzy religiami, narodami, czy **** tam wie kto jeszcze może rozmawiać, ani konkurent tepsy, tylko takie okienko!
Wziął z sieci pierwsze, lepsze, narzędzie(ResEdit!), skonfigurował(podejrzewam że dodadnie folderu "incldue" z kompilatora nie sprawi większości większych trudośći?), dodał dialog(CRTL+D, lub LPM->Add resource..->Dialog), wrzucił kilka kontrolek, pokonfigurował, że wyszło coś takiego:
(Widzicie tą opcję na górze? Jak będziecie się bawić w ustawianie kontrolek, to polecam ją włączyć, wtedy będzie wam automatycznie wyrówynwało do innych kontrolek i do ramki)(tak, wiem że suma summarum nie ma staticbox'a tylko jest disabled editbox,dop.autor)
Potem odpalił edit.com, i z otwartym msdn'em w tle skrobnął taki program:
Kod:
#include <Windows.h>
#include <stdio.h>
#include "resource.h" //Ten plik powinien nam wygenerowac ResEdit
int CALLBACK DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR costam, int nCmdShow) //Dlaczego juz winapi? Aby miec hInstance i nie miec konsoli w tle
{
int i = DialogBox( hInstance, // uchwyt do aplikacji, gdzie znajduje sie template dialogu
MAKEINTRESOURCE( IDD_DIALOG1 ), //id dialogu w rc
0, // rodzic okna, nie mamy
DialogProc );//callback odpowiedzialny za dzialanie okna
return i;
}
int CALLBACK DialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg) //To jest tzw.petla komunikatow
{
case WM_COMMAND: //jezeli uzytkownik cokolwiek zrobi(cos kliknie, etc), wtedy uMsg bedzie rowne stalej WM_COMMAND
if( wParam == IDC_BUTTON1 ) //a wParam bedzie rowne temu co sie kliknelo
{
int i = GetDlgItemInt( hWnd, IDC_EDIT1, 0, 0); //WinApi daje nam piekne funkcje dzieki ktorym nie musimy bawic sie buforami i sscanfami
SetDlgItemInt( hWnd, IDC_EDIT2, i*5, 1); //tak samo jak wyzej
}
break;
default:
DefWindowProc( hWnd, uMsg, wParam, lParam); //niech windows sobie z dialogem radzi jak nic ciekawego sie nie zdarzylo
}
return 0;
}
Następnie nałożył specjalną czapkę dzięki której lepiej mu się pisało w konsoli, odpalił linię poleceń, ustawił patha na mingw\bin, i wziął się za klepanie formułek:
Kod:
windres -i [COLOR="#ff8c00"]dialogtozlotepsarzadzi.rc[/COLOR] -o [COLOR="#800080"]dialogi.res[/COLOR] --output-format=coff
gcc -Xlinker [COLOR="#800080"]dialogi.res[/COLOR] -o [COLOR="#00ff00"]dialogz.exe[/COLOR] dialogi.c
strip [COLOR="#00ff00"]dialogz.exe[/COLOR]
1.Na [COLOR="#ff8c00"]pomarańczowo[/COLOR] wpisujemy plik rc który żeśmy wyklikali w ResEdicie, a na [COLOR="#800080"]fioletowo[/COLOR] nazwę, jaka ma się nazywać po skompilowaniu.
O ile mamy nową wersję MinGW to nie powinno być problemów, starsze mogą się zrzucać o coś z LANGUAGE NEUTRAL, aczkolwiek można to spokojnie z pliku rc wykasować.(A dlaczego kompiluję do coffa, a nie res? Metoda prób i błędów, merytorycznie to cholera wie)
2.Na [COLOR="#00ff00"]zielono[/COLOR] nazwa pliku wyjściowego, a [COLOR="#800080"]fioletowo[/COLOR] nazwę skomplikowanego pliku rc.
3.A tu taka ciekawostka, o ile nie zamierzamy [COLOR="#00ff00"]aplikacji[/COLOR] w przyszłości debugować to można spokojnie przerzucić przez strip, co wycina jakieś tam duperele(prawie jak trimmowanie gier na DSy, hah)
4.Epilog
I dzięki temu wspaniałemu programowi pan Józef zbił fortunę, ponieważ sporo ludzi zadawało sobie różne dziwne pytania, chociażby jak "A co, gdybym pomnożył swoją datę urodzenia przez 5?". Marzenia tych wszystkich ludzi realizował jeden program - superprogrammnozacykazdapodanaliczbeprzez5 z GUI.
(Tak, wiem, z profesjonalnym artykułem nie ma nic wspólnego )