PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe für WinAPI-Anfänger


Locutus2002
2009-08-04, 16:26:53
Hallo,

Nachdem ich durch einige Bücher und dem Studium inzwischen recht gut C++ für Win32-Konsolenanwendungen beherrsche (für einen Anfänger), wollte ich mich nun mit WinAPI vertraut machen. Leider bereitet mir aber schon das simpelste Programm Kopfzerbrechen:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL,(LPCWSTR)"Hallo!", (LPCWSTR)"MessageBox", MB_OK);
return 0;
}

Grund: Die Ausgabe des kompilierten Programms ist chinesisch (unter Vista, unter XP nur Rechtecke)!

Ich verwende eine Studentenversion von MS Visual Studio 2008.

Woran liegt das?

Coda
2009-08-04, 16:39:36
Du kompilierst mit Unicode aktiviert, d.h. du musst L"Hallo!" schreiben statt "Hallo!"

Das sieht man auch an deinen Casts, da steht nämlich LPCWSTR und nicht LPCSTR. Das W steht für "Wide", also 16-Bit-Zeichen.´

Die Casts kannst du dir dann auch sparen ;)

Locutus2002
2009-08-04, 16:43:23
Ja, die Casts waren notwendig, weil sonst Fehlermeldungen kamen, dass char[] ein Casting auf den Datentyp erfordert. Allerdings tritt der Fehler auch mit LPCTSTR statt LPCWSTR auf. Aber Dein Hinweis hat auf jeden Fall geholfen. :) Vielen Dank! :)

EDIT: Hast recht, wenn ich L"Hallo" etc. schreib, dann brauch ich nicht mehr casten. :)

Coda
2009-08-04, 17:00:28
Allerdings tritt der Fehler auch mit LPCTSTR statt LPCWSTR auf.
Natürlich tut er das.

Die funktion erwartet einen wchar_t* und keinen char*.

Gast
2009-08-04, 22:59:31
Ich finde ja die WinAPI nach wie vor hässlich...
Wenn schon GUI und C++ dann lieber Qt (http://doc.qtsoftware.com/4.5/index.html) :)

Locutus2002
2009-08-04, 23:36:38
Ich finde ja die WinAPI nach wie vor hässlich...
Wenn schon GUI und C++ dann lieber Qt (http://doc.qtsoftware.com/4.5/index.html) :)

Ich will erstmal langsam und vor allem einfach anfangen. Zu Qt, MFC usw. kann ich später immer noch kommen. :)

Coda
2009-08-05, 01:21:25
Einfacher würde ich die WinAPI jetzt nicht nennen X-D

ManuelCalavera
2009-08-05, 09:45:52
Ich finde ja die WinAPI nach wie vor hässlich...
Wenn schon GUI und C++ dann lieber Qt (http://doc.qtsoftware.com/4.5/index.html) :)

Du findest alle Windows-Versionen also hässlich?!? :confused:

Gast
2009-08-05, 09:48:22
Du findest alle Windows-Versionen also hässlich?!? :confused:
Nein, er findet die Win32-APIs häßlich.

Gast
2009-08-05, 10:33:38
Ich will erstmal langsam und vor allem einfach anfangen. Zu Qt, MFC usw. kann ich später immer noch kommen. :)
Qt is m.M.n. viel einfacher als die WinAPI, hat Coda ja auch schon gemeint... ;)
Schau dir doch mal ein paar Tutorials auf der von mir verlinkten Seite an, dann siehst du ja ob das was für dich ist.
Du findest alle Windows-Versionen also hässlich?!? :confused:
Nein, er findet die Win32-APIs häßlich.
Ganz genau :)

Elemental
2009-08-05, 10:58:15
Du willst nicht wirklich mit MFC anfangen, hoffe ich...

The_Invisible
2009-08-05, 11:22:34
qt ist gegenüber der winapi wirklich wie ne erlösung.

seit version 4.5 hat man durchgehend unter windows, linux (gtk/qt) und mac auch die nativen widgets in verwendung, wirklich geiles toolkit. :)

wenn man allerdings win-only programme ohne viel overhead/dlls ausliefern will kommt man um winapi/mfc nicht herum.

mfg

Coda
2009-08-05, 14:54:02
Ich werfe aber auch mal wxWidgets in die Runde. Wobei das mit der LGPL-Lizensierung von Qt ein wenig unwichtiger geworden ist.

Locutus2002
2009-08-05, 15:21:58
Ich schnupper mal einfach in alles rein und kann mir dann ne Meinung bilden. Kann ja nicht schaden, sich alles mal angesehen zu haben, zumal ich das ja eher als Hobby sehe. Zwar hatte ich im Studium auch 3 Semester Programmieren, aber das war ziemlich simpel (Mathe-Studium (FH), nicht Informatik) und sollte nur die grundlegensten Konzepte vermitteln, deshalb haben wir auch nie was mit Windows-Programmierung gemacht.

Coda
2009-08-05, 15:24:39
Aber halt dich nicht zu lang mit der WinAPI auf. Das ist zum nen Eindruck bekommen ganz gut, aber bei größeren Projekten würde ich wirklich davon abraten. Das gleiche gilt für MFC.

ManuelCalavera
2009-08-10, 13:58:15
qt ist gegenüber der winapi wirklich wie ne erlösung.

seit version 4.5 hat man durchgehend unter windows, linux (gtk/qt) und mac auch die nativen widgets in verwendung, wirklich geiles toolkit. :)

wenn man allerdings win-only programme ohne viel overhead/dlls ausliefern will kommt man um winapi/mfc nicht herum.

mfg

Alles was ich dazu gefunden habe ist das man die nativen renderer verwendet, von nativen widgets ist da aber keine rede...

Würd mich über nen link freuen in dem das steht.

Gast
2009-08-11, 09:22:37
http://stackoverflow.com/questions/676601/qt-gui-internals-widget-painting

ManuelCalavera
2009-08-11, 10:33:44
Da steht auch nur das nativ gerendert wird, weiter unten steht sogar das sie keine nativen widgets verwenden...

Was sollte mir der link denn nun sagen :confused:

The_Invisible
2009-08-11, 12:03:24
hm, hab wirklich native widgets geschrieben, bin ich mir nicht so sicher, aber natives rendering auf jeden fall.

etwas schwamming das ganze:

http://en.wikipedia.org/wiki/Qt_(toolkit)#Use_of_native_UI-rendering_APIs
http://www.qtsoftware.com/products

das ist auch nur die rede von nativen grafik api. naja, im zweifelsfall kann man ja mal den source ansehen.

mfg

Gast
2009-08-11, 15:46:03
Was sollte mir der link denn nun sagen :confused:

"On Windows XP and Vista (except when the display settings set to Classic), the widget painting via QWindowsXPStyle and QWindowsVistaStyle actually use the low-level theme-specific drawing (uxtheme.dll) so that e.g. a push button looks like a native one."

"Theme-specific drawing" deutet doch stark darauf hin, das nicht auf GDI(+)-Level gerendert wird, oder?

ManuelCalavera
2009-08-11, 16:13:40
"Theme-specific drawing" deutet doch stark darauf hin, das nicht auf GDI(+)-Level gerendert wird, oder?

Ein natives Widget besteht aber aus mehr als dem was man sieht...


@The_Invisible

Schade, ich dachte du hast da was genaueres zu. Dann scheint das was im wxWidgets wiki steht doch aktuell zu sein. http://wiki.wxwidgets.org/WxWidgets_Compared_To_Other_Toolkits#Qt

The_Invisible
2009-08-11, 16:49:09
ich bin jetzt selber ein bisschen verwirrt.

zumindest werden bei den meisten standard-dialogen die nativen verwendet, siehe zb http://qt.nokia.com/doc/4.5/qfiledialog.html#getExistingDirectory oder http://qt.nokia.com/doc/4.5/qprintdialog.html

kann auch sein das ich mich da einfach ganz übel vertan habe.

mfg

Ectoplasma
2009-08-11, 20:45:32
QT mag ja ganz in Ordnung sein. Der SDK 2009 Installer ist wurde jedenfalls von komplett inkompetenten Entwicklern programmiert. Habs gerade probiert und ärgere mich. Man muss Admin sein um das SDK richtig zu installieren und es wird einem schön das Root-Laufwerk mit irgendwelchen txt Dateien zugemüllt. Daumen runter für den Installer. Möchte den Mist am liebsten gleich wieder deinstallieren.

Gast
2009-08-11, 21:36:23
QT mag ja ganz in Ordnung sein. Der SDK 2009 Installer ist wurde jedenfalls von komplett inkompetenten Entwicklern programmiert. Habs gerade probiert und ärgere mich. Man muss Admin sein um das SDK richtig zu installieren und es wird einem schön das Root-Laufwerk mit irgendwelchen txt Dateien zugemüllt. Daumen runter für den Installer. Möchte den Mist am liebsten gleich wieder deinstallieren.
Wie willst du denn sonst $PATH verändern wenn nicht als admin?
Und als ich das letzte mal Qt unter Windows gemacht habe (4.3) gabs auch keine txt Dateien am root-LW... was liegt denn dort bzw warum ist das so schlimm?

The_Invisible
2009-08-11, 22:01:22
QT mag ja ganz in Ordnung sein. Der SDK 2009 Installer ist wurde jedenfalls von komplett inkompetenten Entwicklern programmiert. Habs gerade probiert und ärgere mich. Man muss Admin sein um das SDK richtig zu installieren und es wird einem schön das Root-Laufwerk mit irgendwelchen txt Dateien zugemüllt. Daumen runter für den Installer. Möchte den Mist am liebsten gleich wieder deinstallieren.

kann ich leider nichts dazu sagen da ich nur das framework runterlade, welches ich mit eclipse + qt plugin nutze (windows + linux). da hats aber noch nie solche komischen probleme gegeben.

mfg

Coda
2009-08-11, 22:02:22
Die richtige Schreibweise ist "Qt" und es wird "cute" ausgesprochen. Das ist keine Abkürzung :tongue:

Ectoplasma
2009-08-12, 01:10:37
Wie willst du denn sonst $PATH verändern wenn nicht als admin?

Selbstverständlich kann kannst du die $PATH Variable für den lokal angemeldeten Bentutzer verändern. Es gibt eine $PATH Variable für das System und jeder Benutzer hat nochmal seine eigene. Beide werden dann gemerged. Es aber schon seit ungefähr 13 Jahren so unter Windows. Man sollte meinen, dass das schon alle mitbekommen haben.

Gast
2009-08-12, 10:05:49
Selbstverständlich kann kannst du die $PATH Variable für den lokal angemeldeten Bentutzer verändern. Es gibt eine $PATH Variable für das System und jeder Benutzer hat nochmal seine eigene. Beide werden dann gemerged. Es aber schon seit ungefähr 13 Jahren so unter Windows. Man sollte meinen, dass das schon alle mitbekommen haben.
Na ich ging schon davon aus dass er die globale PATH verändern will... sollen ja alle Nutzer des Systems in den Genuß von Qt kommen, nä? :D
War ja nur ein Beispiel, soweit ich weiß verlangt doch so gut wie jeder Installer von irgendwas (Spiel, Anwendung, irgendein Furz-Tool) gleich mal Admin-Rechte... Sehe also nicht so ganz wo das Problem dabei liegt wenns der Qt-Installer auch tut...

Ectoplasma
2009-08-12, 14:23:47
Sehe also nicht so ganz wo das Problem dabei liegt wenns der Qt-Installer auch tut...

Ich würde mich ja auch gar nicht sooo darüber ärgern, wenn der Installer mir zu Anfang wenigstens angekündigt hätte, das er Admin-Rechte braucht. Hat er aber nicht. So hatte ich eine völlig vergurkte, halb funktionierende Version auf meinem Rechner.

Aber nachdem ich alles schön als Admin installiert hatte und mein C: Laufwerk von den Installationsresten gereinigt hatte, liefs es ja. Allerdings ist der QtCreator ebenfalls massiv verbesserungsbedürftig. Die Qt Demo ist allerdings schon sehr beeindruckend ;)