|
You last visited: Today at 18:31
Advertisement
SHAppBarMessage mit Qt-Creator benutzen
Discussion on SHAppBarMessage mit Qt-Creator benutzen within the C/C++ forum part of the Coders Den category.
11/19/2013, 03:47
|
#1
|
elite*gold: 0
Join Date: Sep 2013
Posts: 16
Received Thanks: 5
|
SHAppBarMessage mit Qt-Creator benutzen
Hallo,
ich versuch jetzt seit paar Stunden die Funktion SHAppBarMessage in einem Projekt zu benutzen.
Ich will eigentlich eine Taskbar wie die Windows Taskbar bauen.
Ich programmiere in Qt-Creator. Habe für Qt eine AppBar gedownloadet und bekomme aber beim Compilieren folgenden Fehler.
Code:
QAppBar.obj:-1: Fehler:LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp_SHAppBarMessage" in Funktion ""public: void __cdecl QAppBar::setWidth(int)" (?setWidth@QAppBar@@QEAAXH@Z)".
Die Funktion dazu sieht so aus:
Code:
void QAppBar::setWidth( int w )
{
// Positioning an appbar is a three-step process:
// 1) We ask Windows what area is available for appbars by sending it an
// ABM_QUERYPOS with a RECT covering the entire desktop; it returns
// a modified RECT that excludes the taskbar and other appbars.
// 2) We come up with a position and size for the appbar (based on
// this.edge and this.width), staying inside this RECT, and pass it
// to Windows using ABM_SETPOS.
// 3) On the slim chance that another appbar appears between ABM_QUERYPOS
// and ABM_SETPOS, we'll get a modified RECT back. Use this final
// RECT to setGeometry().
// If child widgets have mandated a minimum width on this window, it
// must be respected
if( minimumWidth() != 0 ) w = max( w, minimumWidth());
// Get the area of the entire desktop
abd.rc.left = abd.rc.top = 0;
abd.rc.right = GetSystemMetrics( SM_CXSCREEN );
abd.rc.bottom = GetSystemMetrics( SM_CYSCREEN );
// Let Windows subtract the amount being used by other appbars and the
// taskbar
SHAppBarMessage( ABM_QUERYPOS, &abd );
// Position our window on either the left or right side of the screen
if( abd.uEdge == ABE_LEFT ) abd.rc.right = abd.rc.left + w;
else abd.rc.left = abd.rc.right - w;
// Pass the final bounding rectangle to the system
SHAppBarMessage( ABM_SETPOS, &abd );
// Set our actual position based on what came back from ABM_SETPOS
RECT& rc = abd.rc;
setGeometry( rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top );
resizeHandle->setFixedHeight( rc.bottom - rc.top );
}
Die includes der Header-Datei sehen so aus:
Code:
...
#include <windows.h>
#include <shellapi.h>
|
|
|
11/19/2013, 10:10
|
#2
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Hey,
vielen Dank für die Information, bitte halte uns auf dem Laufenden!
|
|
|
11/19/2013, 16:36
|
#3
|
elite*gold: 0
Join Date: Sep 2013
Posts: 16
Received Thanks: 5
|
Quote:
Originally Posted by Nightblizard
Hey,
vielen Dank für die Information, bitte halte uns auf dem Laufenden!
|
Ich habe eigentlich gehoft IHR könnt mir bei meinem Problem helfen
|
|
|
11/20/2013, 14:07
|
#4
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
Weil du es selbst nicht verstehst: er wollte dir damit eigentlich subtil klar machen, dass in deinem Post keine Frage oder sonstige, hilfreiche Informationen enthalten sind.
Weil ich heute gut drauf bin:
Du hast in deinem Projekt die shellapi.h included, soweit richtig. Was aber genau verursacht einen Linkerfehler? Die Lösung zu deinem Problem findest du auf der oben verlinkten Seite.
Padmak
|
|
|
11/20/2013, 16:59
|
#5
|
elite*gold: 0
Join Date: Sep 2013
Posts: 16
Received Thanks: 5
|
Quote:
Originally Posted by Padmak
Weil du es selbst nicht verstehst: er wollte dir damit eigentlich subtil klar machen, dass in deinem Post keine Frage oder sonstige, hilfreiche Informationen enthalten sind.
|
Hmmm, ich habe einen Fehler beim Compilieren. Was soll ich da noch für Fragen stellen? Soll ich extra noch dazu schreiben, warum bekomme ich diesen Fehler?
Was für Infos hättest du gerne mehr gesehen? (Damit ich es für weitere Post weiß)
Quote:
Weil ich heute gut drauf bin:
Du hast in deinem Projekt die shellapi.h included, soweit richtig. Was aber genau verursacht einen Linkerfehler? Die Lösung zu deinem Problem findest du auf der oben verlinkten Seite.
Padmak
|
Ich weiß warum ein Linker Fehler auftritt, weil Bibliotheken fehlen. Ich weiß aber nicht, wie ich die am besten bei Qt-Creator einbinde kann. Ob über das Pro-File oder doch besser mit (in meinem Fall) #pragma comment(lib, "shell32.lib"). Zudem hatte ich an dem Abend auch noch mit #pragma Probleme.
Bin halt bisschen neu hier. Schade, dass gleich so auf einen Neuling draufgehauen wird
Gebt mir doch noch ein bisschen Welpenschutz
|
|
|
11/20/2013, 20:26
|
#6
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Naja, wenn ich Hilfe von anderen erwarte, dann versuche ich ihnen so viele Informationen über das Problem zu geben, wie es nur irgendwie geht. Nicht jeder hat eine Klaskugel auf seinem Schreibtisch stehen.
Quote:
Ich weiß warum ein Linker Fehler auftritt, weil Bibliotheken fehlen. Ich weiß aber nicht, wie ich die am besten bei Qt-Creator einbinde kann. Ob über das Pro-File oder doch besser mit (in meinem Fall) #pragma comment(lib, "shell32.lib"). Zudem hatte ich an dem Abend auch noch mit #pragma Probleme.
|
Na also, damit fang ich doch was an und muss weder rätselraten noch spoonfeeden.
Externe Libraries fügst du in der .pro Datei folgendermaßen hinzu:
Code:
LIBS += -L"pfad\zur\datei" -lDATEINAME
# Beispiel mit mylib.lib im Verzeichnis "C:\MyLib":
# LIBS += -L"C:\MyLib" -lmylib
|
|
|
11/20/2013, 23:43
|
#7
|
elite*gold: 0
Join Date: Sep 2013
Posts: 16
Received Thanks: 5
|
Danke, werde ich gleich mal ausprobieren.
Ich hab natürlich bei google auch geguckt gehabt. Die haben immer nur was von wegen LIBS += name.lib geschrieben und das ging nicht
Ich hab halt gedacht der Fehler sagt mehr als 1000 Worte
Eine kleine Frage hab ich aber noch. Mit #pragma ... könnte ich aber auch arbeiten oder?
|
|
|
11/21/2013, 15:14
|
#8
|
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
|
Ich bin mir nicht sicher, ob der von Qt mitgelieferte Compiler #pragma comment unterstützt. Wenn die den gcc nutzen, dann wird das nicht funktionieren.
|
|
|
11/21/2013, 15:21
|
#9
|
elite*gold: 0
Join Date: Aug 2011
Posts: 1,190
Received Thanks: 549
|
Jep, minGW ignoriert alle #pragma comments.
Mit MSVC2012 o.Ä. könntest du es aber machen
|
|
|
11/21/2013, 23:12
|
#10
|
elite*gold: 0
Join Date: Jan 2009
Posts: 1,160
Received Thanks: 232
|
Quote:
Eine kleine Frage hab ich aber noch. Mit #pragma ... könnte ich aber auch arbeiten oder?
|
#pragma ist aber eher unschön. Man muss sich nur mal den Fall vorstellen, dass man ein ziemlich großes Projekt vorgelegt kriegt und die Dependencies über alle Dateien verteilt sind anstatt ordentlich in den Projekteinstellungen festgelegt.
|
|
|
All times are GMT +2. The time now is 18:31.
|
|