» »

[c++] & Win32 API?

[c++] & Win32 API?

fx ::

Upelo mi je narediti prvo pravo okno z c++. Seveda ni kaj dosti za videti, samo je. Sedja pa me zanima kako naredim da bodo gumbi in podobne zadev v mojem oknu oz. katere ključne besede v googlu naj uporabim?

Nekaj tekega kot je tukaj samo ne v Visual C++.

lp
  • spremenil: fx ()

OwcA ::

Otroška radovednost - gonilo napredka.

Nerdor ::

Legendarni theForger's Win32 API Tutorial v plain C-ju. Priporočljivo prebrati in par primerov napraviti, preden se vržeš v C++ in objektno orientirane frameworke.
KDE Qt3 on Windows - zelo objektno usmerjena (kot Delphi ali .Net) in ne toliko "zatežena" kot MFC ali WxWidget
... for lifetime!

ql000 ::

Ej Nerdor sam ti maš pa hude! Ob vsem tem pompu ob RAD-u, ti tipo šopaš najbolj SadoMazo zadeve!

Borland C++ Builder je majka!

mov ax 0x7c0 ::

Vsak dan nekaj novega :)

Nerdor ::

ql000: recimo, da je to res, če cena ni ovira! Sicer je VCL močno ogrodje razredov, vendar kot sem prej omenil drag je ko žafran. (od 0.5M sit do 1M sit za enterprise 8-O )

Če smo že pri temu, da denar ni problem, potem bi izbral Delphi 2005. Delphi jezik mi je veliko bolj privlačen kot C++ (bolj strukturiran, bolj berljiv, nima čudaških makrojev).
Poleg tega, paskalska koda, zaradi berljivosti omogoča kompajlerju, da se do 9 krat hitreje prevede v binarno kodo kot pri C++. Pa še "(n)make" ni treba pisati. Pa še komponente delujejo v različnih verzijah delphijov. Za CBuilder pa mora biti komponenta posebej prirejena.

Hej, za Qt3 za osebno uporabo ti TrollTech prilaga Qt Designer. Kar ti omogoča, da kot v CBulderju izdelaš vmesnik v xml formatu. C++ kodo pa skodiraš v svojem omiljenem editorju in prevedeš. Vse zastojn. (razen VS.Net, ampak, ta je cenovno kot kompajler "sprejemljiv" za razliko od CBuilderja)
... for lifetime!

Mmm'Aah ::

Fora je v tem, da poleg osnovnih API-jev od operacijskega sistema potrebujes tudi t.i. zbirko tipičnih kontrol (Label, Button, TextBox itd.). Na Windows platformi je to MFC (Microsoft Foundation Classes) in Visual C++ ti omogoča neposredno delo s temi razredi. Uporabljat MFC brez Visual C++ je pravzaprav ubijalsko delo oz. skoraj nemogoče, ker ima VC++ svoj Class Manager, al nekaj takega, ki ti v kodo vstavlja razne ukaze za precompiler, ki povezujejo in drzijo ves grafični vmesnik skupaj (povezujejo dogodke, s funkcijami zanje itd.). Če bi se hotel sam naučiti vsega tega, kar VC++ naredi zate, bi rabil kako leto da bi ti sloh dva gumba uspelo nardit.

Če se odločiš uporabljat VisualC++ se lahko kar pod nosom obrišeš za prenosnost kode, ker bo ta delal le in samo na Windows platformah. Lahko se odločiš uporabit druge zbirke razredov, ko prvotno izhajajo iz Linux platforme (Gtk, Qt, WxWidgets). Te so veliko bolj prenosne in podprte na več platformah, vendar bo tak program na vsaki platformi potreboval cel kup knjižnic in drugih dodatnih stvari, da bo tam delal. Linux in MacOSX imata to že skoraj vse postavljeno, tako da tam ne bi smelo bit problema, Windows pa nimajo praktično nič skupnega s temi zbirkami kontrol (zahvali se BillGates-u), zato bo na Win sistemah treba marsikaj porihtat da bo program delal, pa še vsak uporabnik programa bo moral to isto nardit na svoji mašini.

Ravno zaradi tega neskladja z GUI knjižnicami sem se odločil spisat svojo zbirko tipičnih razredov (to sem ravnokar omenil pod eno temo o OpenGL programiranju. Z njo lahko odpreš glavno okno in nanj postaviš en gumb, ter ga povežeš s funkcijo na dogodek Click v 10 vrsticah kode, tvoj program bo pa deloval popolnoma enako na vseh operacijskih sistemih.
Zainteresiran?

64202 ::

Tole je ze kdo probal?
fox-toolkit.org
I am NaN, I am a free man!

fx ::

Mmm'Aah jaz sem.

lp

Mmm'Aah ::

Tukaj je koda za nardit to kar sem v prejsnjem postu opisal:

#include "ShmanssyGUI.h"
int main(int argc, char *argv[])
{
//okno velikosti 400x300 pixlov, brez harverskega pospeševanja, 32-bitne barve
SDU_CreateMainWindow(SDU_NORMAL, SDU_WINDOWED, 400, 300, 32);

//postavi izrisovanje na okno ki smo ga prej kreirali, ter na izris ob dogodkih
SG_Init(SG_REDRAW_ON_EVENTS);

//nek default font - podpora za fonte je trenutno se v razvoju
SG_LoadFont(font.sgf);

//nov gumb velikosti 100x20 pixlov
SG_Button *btnTest = new Button();
btnTest.SetBounds(0,0,100,20);
btnTest.SetText("klikni me!");
btnText.OnClicked = OnBtnClicked;

SG_EventLoop();

SDU_CleanUp();
SG_CleanUp();
}

Evo...brez komentarjev in praznih vrstic je vsega skupaj 14 vrstic kode;) Program se ustavi na vrstici SG_EventLoop() in tam cikla in odgovarja na dogodke. Ko zapreš okno pa se funkcija SG_EventLoop konča in s program tudi, po tem ko kliče še funkcije za počistit spomin. Pol pa napišeš še funkcijo void OnBtnClicked() in v njej kar pač hočeš da se zgodi ko klikneš.

Ko prevajaš program moraš linkat sledeče: OpenGL, GLU, GLUT, SDL, SDLmain, ShmanssyGUI pthreadVC1. Zdaj kako boš to linkal in prevedel je odvisno od tega na katerem OS-u misliš to uporabljat in s katerim prevajalnikom boš to počel. Na Linux in MacOSX to komot nardiš z eno vrstico v konzoli, na Windows sistemu pa z malo več kompliciranja.

Ti je kaj povšeči? Če hočeš ti pošljem knjižnico ShmanssyGUI.lib in natančneje razložim kako se programček prevede.

Gundolf ::

Huh: "moraš linkat sledeče: OpenGL, GLU, GLUT, SDL, SDLmain, ShmanssyGUI pthreadVC1".
Zakaj pa mešaš GLUT in SDL? In pa SDL in pthread? SDL ima čisto solidno podporo za threade in vse kar ponuja GLUT ali sem jaz kaj spregledal?

SFfreak ::

Da se razvijati Win32 aplikacije z GUI v C++u brez MFCja, ki deluje le v Visual Studio in nikjer drugje...

Priporočam Dev-C++ in pa program ResEdit, za grafično oblikovanje dialogov :D

Nerdor ::

publikum: In ta razredna zbirka za C++, ki ni MFC je.. Sicer pa, da se napisat C++ wrapper za C-jevski win32 api, ampak, to je duhomarno delo.
... for lifetime!

64202 ::

I am NaN, I am a free man!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C++ Izdelava GUI programa

Oddelek: Programiranje
10812 (612) zacetnik11
»

C++ programirane v Open GL oz. Direct x

Oddelek: Programiranje
242872 (2143) Vesoljc
»

win api (c++)

Oddelek: Programiranje
462405 (1685) Gundolf
»

[C++] Galerija kode

Oddelek: Programiranje
283955 (3060) 64202
»

Kje začeti z programiranjem? (strani: 1 2 )

Oddelek: Programiranje
947567 (5171) BigWhale

Več podobnih tem