Win 32 API – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Win 32 API – C / C++ – Fórum – Programujte.comWin 32 API – C / C++ – Fórum – Programujte.com

 

radvis0
Newbie
17. 11. 2009   #1
-
0
-

ahoj, čtu si recenzi o vyvoji aplikaci do windowsu. http://www.radekchalupa.cz/clanky/?kod=214&obsah=1 a je tam kod kterej by měl vypsat určitej text. Bohužel se mi to nevypíš. může to být tím, že mam 64bitovy procesor? Nemáte někdo lepší tutoriál? Díky.

Nahlásit jako SPAM
IP: 77.48.130.–
KIIV
~ Moderátor
+43
God of flame
17. 11. 2009   #2
-
0
-

funguje v pohode.. 64b to urcite nebude... to musi fungovat

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis0
Newbie
17. 11. 2009   #3
-
0
-

Ok, budu hledat chybu jinde ... mrkl by jses na to prosím?
Btw. je dobré učit se v win 32 api?
Díky!




//v main.h mám #include <windows.h>
#include "main.h"

#define _MainClassName TEXT("WinAPIMainClass")
#define _AppName TEXT("Učíme se WinAPI")


HINSTANCE g_hInstance;
HWND g_hwndMain;

typedef char CHAR;
typedef wchar_t WCHAR;

#ifdef UNICODE
typedef WCHAR TCHAR, *PTCHAR;
#else
typedef char TCHAR, *PTCHAR;
#endif

TEXT(
LPTSTR string // ANSI or Unicode string
);

LRESULT CALLBACK WindowProcMain(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch ( uMsg )
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

BOOL InitApp()
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = g_hInstance;
wc.lpfnWndProc = WindowProcMain;
wc.lpszClassName = _MainClassName;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
if ( !RegisterClassEx(&wc) )
return FALSE;

g_hwndMain = CreateWindowEx(0, _MainClassName,
_AppName,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 450, 350,
NULL, NULL, g_hInstance, NULL);
if ( g_hwndMain == NULL )
return FALSE;
return TRUE;
}

MSG msg;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShow)
{
g_hInstance = hInstance;
if ( !InitApp() )
return FALSE;
while ( GetMessage(&msg, NULL, 0, 0) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

void OnWM_PAINT()
{
PAINTSTRUCT ps;
HDC hdc;
TCHAR chText[] = TEXT("Ahoj Win API !");
hdc = BeginPaint(g_hwndMain, &ps);
TextOut(hdc, 10, 10, chText, lstrlen(chText));
EndPaint(g_hwndMain, &ps);
}

LRESULT CALLBACK WindowProcMain(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch ( message )
{
case WM_PAINT:
OnWM_PAINT();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}


Nahlásit jako SPAM
IP: 77.48.130.–
m->29+6
Super člen
17. 11. 2009   #4
-
0
-

Možno keby si tam nemal 2krát tú istú fukciu :smile5:

LRESULT CALLBACK WindowProcMain(...)
Zoberie to tú prvú v ktorej vôbec nemáš zachytenú správu WM_PAINT, ak ti to teda vôbec ide skompilovať :smile13:

Nahlásit jako SPAM
IP: 147.229.208.–
plasmo0
Věrný člen
18. 11. 2009   #5
-
0
-

To radvis :
Podle mě ne, když už tu jsou věci jako WPF.

Nahlásit jako SPAM
IP: 82.150.166.–
Jak vzniká vynález? To všichni vědí, že je něco nemožné, a pak se objeví nějaký blázen, který neví, že je to nemožné, a udělá vynález. [br] Albert Einstein [br][br] http://plasmo.cz [br] http://bleskovaregistrace.cz [br] http://livetrading.cz
liborb
~ Redaktor
+18
Guru
18. 11. 2009   #6
-
0
-

To radvis :
Jestli má cenu učit se Win 32 API? Když se ptáš takto obecně, tak nemá (i když ho sám používám).
Otázka spíš je, jestli to má cenu pro tebe. Chceš pochopit princip (když ses na něj před časem ptal)? Chceš vědět, jak to vlastně funguje? A proč? Jednoduše řečeno, záleží na tom, čeho chceš dosáhnout ...

Udělat aplikaci ve Win32 API není o nic složitější než v čemkoliv jiném (když chápeš princip), ale určitě to bude časově více náročné.

Nahlásit jako SPAM
IP: 85.207.166.–
radvis0
Newbie
18. 11. 2009   #7
-
0
-

Chci, čtu o tom "tutoriál", který jsem uvedl nahoře. Teď je však otázka jestli mám pokračovat ve win32 API nebo se učit něco novějšího.

Nahlásit jako SPAM
IP: 77.48.130.–
radvis0
Newbie
18. 11. 2009   #8
-
0
-

m->29 napsal:
Možno keby si tam nemal 2krát tú istú fukciu :smile5:

LRESULT CALLBACK WindowProcMain(...)
Zoberie to tú prvú v ktorej vôbec nemáš zachytenú správu WM_PAINT, ak ti to teda vôbec ide skompilovať :smile13:



Nejde "se to provede", ale nic se nestane. Skusil jsem dat pryc tu první, ale nejde to:( . Nemohl by jsi mi to opravit prosim? Díky.

Nahlásit jako SPAM
IP: 77.48.130.–
KIIV
~ Moderátor
+43
God of flame
18. 11. 2009   #9
-
0
-

netusim jak to delas ale me to jede s timdle naprosto v pohode... v cem a jak kompilujes? co ti hlasi prekladac? :

#include <windows.h>


#define _MainClassName TEXT("WinAPIMainClass")
#define _AppName TEXT("Učíme se WinAPI")


HINSTANCE g_hInstance;
HWND g_hwndMain;

typedef char CHAR;
typedef wchar_t WCHAR;
MSG msg;

#ifdef UNICODE
typedef WCHAR TCHAR, *PTCHAR;
#else
typedef char TCHAR, *PTCHAR;
#endif

TEXT(
LPTSTR string // ANSI or Unicode string
);

LRESULT CALLBACK WindowProcMain(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);


BOOL InitApp()
{
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = g_hInstance;
wc.lpfnWndProc = WindowProcMain;
wc.lpszClassName = _MainClassName;
wc.lpszMenuName = NULL;
wc.style = CS_HREDRAW | CS_VREDRAW;
if ( !RegisterClassEx(&wc) )
return FALSE;

g_hwndMain = CreateWindowEx(0, _MainClassName,
_AppName,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 450, 350,
NULL, NULL, g_hInstance, NULL);
if ( g_hwndMain == NULL )
return FALSE;
return TRUE;
}



int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShow)
{
g_hInstance = hInstance;
if ( !InitApp() )
return FALSE;
while ( GetMessage(&msg, NULL, 0, 0) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

void OnWM_PAINT()
{
PAINTSTRUCT ps;
HDC hdc;
TCHAR chText[] = TEXT("Ahoj Win API !");
hdc = BeginPaint(g_hwndMain, &ps);
TextOut(hdc, 10, 10, chText, lstrlen(chText));
EndPaint(g_hwndMain, &ps);
}



LRESULT CALLBACK WindowProcMain(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch ( message )
{
case WM_PAINT:
OnWM_PAINT();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis0
Newbie
18. 11. 2009   #10
-
0
-

"píšu" to ve visual c++ a kompiluju to v wxSev-C++. Nepíše mi to žádnou chybu, jen se nic neprovede.

Nahlásit jako SPAM
IP: 77.48.130.–
m->29+6
Super člen
18. 11. 2009   #11
-
0
-

No ja keď som zmazal tú funkciu tak mi to v pohode ide.

Nahlásit jako SPAM
IP: 147.229.208.–
radvis0
Newbie
18. 11. 2009   #12
-
0
-

Mě to prostě nejde, sakra jak je to možny:( . Zítra se na to ještě zkusím podívat. kdyby někoho napadlo, čím by to mohlo být, ocením každou radu. Díky.

Nahlásit jako SPAM
IP: 77.48.130.–
KIIV
~ Moderátor
+43
God of flame
18. 11. 2009   #13
-
0
-

To radvis : ja kompiluju v obycejnem mingw .. resp v dev-cpp .. nastavit okynkovej projekt a ze to chci v C .. ikdyz v C++ to jelo taky

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis0
Newbie
19. 11. 2009   #14
-
0
-

To KIIV : Aha, ted jsem si všiml chyby. In function 'LRESULT WindowProcMain(HWND_*, UINT, WPARAM, LPARAM)':, 'OnWM_PAINT' was not declared in this scope, In function 'int WinMain(HINSTANCE_*, HINSTANCE_*, CHAR*, int)':, 'msg' was not declared in this scope (to tam je 2x pod sebou).

Nahlásit jako SPAM
IP: 77.48.130.–
KIIV
~ Moderátor
+43
God of flame
19. 11. 2009   #15
-
0
-

To radvis : musis dat MSG msg;
nekde na zacatek .. jeste nez ho poprve pouzijes

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis0
Newbie
19. 11. 2009   #16
-
0
-

Už jen:

In function 'LRESULT WindowProcMain(HWND_*, UINT, WPARAM, LPARAM)':

'OnWM_PAINT' was not declared in this scope

Nahlásit jako SPAM
IP: 77.48.130.–
KIIV
~ Moderátor
+43
God of flame
19. 11. 2009   #17
-
0
-

To radvis : opet .. abys mohl neco pouzit, musi to uz existovat
tj OnWM_PAINT() musi byt deklarovane nebo rovnou definovano pred tim nez se na ni odvolavas

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis0
Newbie
19. 11. 2009   #18
-
0
-

A jak ho mam deklarovat/definovat? Promiň, jsem trošku pomalejší:D .

Nahlásit jako SPAM
IP: 77.48.130.–
KIIV
~ Moderátor
+43
God of flame
19. 11. 2009   #19
-
0
-

nemyslis ze bude lepsi zacit zakladama C ? takhle u winapi zdechnes nez cokoliv rozjedes...

deklarace funkce:
int funkce(int param1, int param2);
nebo taky jen: int funkce(int,int);
jen rikas prekladaci: "bude tu funkce funkce ktera prijima dva parametry typu int a vraci taktez int"

definice funkce:
int funkce(int param1, int param2) {
return param1*param2;
}
a definice uz musi obsahovat i co ta funkce vlastne ma delat.. na zacatku muzes dat deklaraci a na konec pak definici...
(pripadne deklarace do hlavickoveho souboru a definice do samostatneho zdrojaku.. akorat se to pak musi spravne slinkovat)
ted ti staci vse v jednom

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis0
Newbie
19. 11. 2009   #20
-
0
-

To KIIV : Za 1. nemaš prosím dokumentaci na to C? Za 2. nemůžeš to ještě napsat jak to bude v mém případě? Začnu číst teda C, jen mě zajíma jak to zprovoznit aspoň.

Nahlásit jako SPAM
IP: 77.48.130.–
KIIV
~ Moderátor
+43
God of flame
19. 11. 2009   #21
-
0
-

To radvis : proste dej void OnWM_PAINT(); nekam na zacatek.. treba hned za msg

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis0
Newbie
19. 11. 2009   #22
-
0
-

[Linker Error] undefined reference to `TextOutA@20'
ld returned 1 exit status

Nahlásit jako SPAM
IP: 77.48.130.–
m->29+6
Super člen
20. 11. 2009   #23
-
0
-

Tým na začiatok nemyslel pred #include <windows.h> :smile6:

Nahlásit jako SPAM
IP: 147.229.208.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
20. 11. 2009   #24
-
0
-

To m->29 : Nemám to před tím.

#include <windows.h>

#define _MainClassName TEXT("WinAPIMainClass")
#define _AppName TEXT("Učíme se WinAPI")

HINSTANCE g_hInstance;
HWND g_hwndMain;

typedef char CHAR;
typedef wchar_t WCHAR;
MSG msg;
void OnWM_PAINT();


#ifdef UNICODE

typedef WCHAR TCHAR, *PTCHAR;

#else

typedef char TCHAR, *PTCHAR;

#endif

Nahlásit jako SPAM
IP: 82.117.133.–
KIIV
~ Moderátor
+43
God of flame
20. 11. 2009   #25
-
0
-

To Anonymní uživatel : proc vlastne nepouzijes funkcni kod jak sem ho pred par posty posilal?

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis
~ Anonymní uživatel
25 příspěvků
20. 11. 2009   #26
-
0
-

Nejde mi.

Nahlásit jako SPAM
IP: 90.177.164.–
KIIV
~ Moderátor
+43
God of flame
20. 11. 2009   #27
-
0
-

To radvis : me ano.. normalni mingw (dev-c++)

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
liborb
~ Redaktor
+18
Guru
20. 11. 2009   #28
-
0
-

To radvis : Nelepší asi bude, když sem daš kompletní projekt včetně všech zdrojových souborů (nejlépe v ZIPu).

Nahlásit jako SPAM
IP: 91.203.96.–
radvis
~ Anonymní uživatel
25 příspěvků
21. 11. 2009   #29
-
0
-

A co více by jsi potřeboval? Mám tam ještě main.h a tam mám: #include <windows.h> (dělal jsem to podle tutoriálu, na který jsem dal odkaz uplně nahoře).

Nahlásit jako SPAM
IP: 90.177.164.–
liborb
~ Redaktor
+18
Guru
21. 11. 2009   #30
-
0
-

To radvis : Co ještě chci? :-)
Chtěl jsem ti pomoci vyřešit tvůj problém, aby se ti lépe spalo. Podle toho tutorialu to dělal KIIV a funguje mu to. Tobě to nefunguje. Jakou chybou to končí nepíšeš. Tak jsem chtěl vědět, jestli je problém v nastavení projektu nebo jestli je problém mezi klávesnicí a židlí :-) ...
Prostě aby ti to programování neznechutil hello world příklad.

Nahlásit jako SPAM
IP: 91.203.96.–
KIIV
~ Moderátor
+43
God of flame
21. 11. 2009   #31
-
0
-

To liborb : kdyby jen podle tutorialu.. sem vzal ten jeho kod tady na zacatku trochu usporadal a bezi naprosto bez problemu... (tj vyhodil tu dvoji definici a tak)

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis
~ Anonymní uživatel
25 příspěvků
21. 11. 2009   #32
-
0
-

Já tu psal co mi to píše.
[Linker Error] undefined reference to `TextOutA@20'
ld returned 1 exit status

Nahlásit jako SPAM
IP: 90.177.164.–
KIIV
~ Moderátor
+43
God of flame
21. 11. 2009   #33
-
0
-

stahni si to za***** dev-c++, vytvor projekt (windows aplication, C ), a tam nakopiruj ten kod..
nevim v cem a jak to kompilujes ale evidentne to delas blbe

EDIT: jeste sem zkusil cisty mingw a gcc program.c se zkompiloval naprosto bez problemu

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
KIIV
~ Moderátor
+43
God of flame
21. 11. 2009   #34
-
0
-

tak kdyz sem zkusil soubor.c v codeblocks tak to hodilo tu hlasku jak si rikal...
kdyz sem si dal zalozit projekt pro win a do toho napasoval kod tak to bezi uplne bez problemu

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis
~ Anonymní uživatel
25 příspěvků
21. 11. 2009   #35
-
0
-

Díky moc, udělal jsem to jak jsi napsal v tom C a jde mi to. Ještě jednou díky za vaší trpělivost.

Nahlásit jako SPAM
IP: 90.177.164.–
KIIV
~ Moderátor
+43
God of flame
21. 11. 2009   #36
-
0
-

To radvis : njn zacatky sou tezky,..

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
radvis0
Newbie
21. 11. 2009   #37
-
0
-

plasmo napsal:
To radvis :
Podle mě ne, když už tu jsou věci jako WPF.

Co se mám teda rači učit? A nemáš nějakej "dobrej" tut?

Nahlásit jako SPAM
IP: 90.177.164.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 29 hostů

Podobná vlákna

Win API — založil Midnight

Win 32 api Dialogy — založil whysper

Win API - Listbox — založil FP91

WIN API WM_PAINT — založil unk

Win 32 API - Podokno — založil FanatiK

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý