XP-Themes aktivieren und CD-Laufwerk öffnen / schließen



  • moin Leutz,

    hab mich heute mal drangemacht, und mir Managed C++ angeguckt.
    Da ich bissel was gegen Wizards habe, hab ich von Hand mal was gezaubert.
    natürlich erstmal Konsolenebene.
    dann dachte ich mir, ne MessageBox könnte auch nicht schaden, also schnell Windows.Forms mit eingebunden.
    klappt auch fein, nur hat die MessageBox keine XP-Styles 😞

    wie kann ich die aktivieren?
    das Manifest brauche ich ja nicht, weil das der Linker automatisch reinbaut,
    und die Variante vom normalen Win32:

    #if defined _M_IX86 
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    #elif defined _M_IA64 
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    #elif defined _M_X64 
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    #else 
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    #endif
    

    funktioniert auch nicht.
    naja und InitCommonControls gibts ja nicht^^

    also Frage Nummer 1: wie kann ich die XP-Themes aktivieren?

    und weiter zu Frage 2.

    ich hatte mal ein Salami-Programm^^

    int ans = MessageBox(NULL, "Brauchst du Platz für eine Scheibe Salami?", "Salami?", MB_YESNO|MB_ICONQUESTION);
    if (ans == IDYES)
    {
        mciSendString("open cdaudio", 0, 0, 0);
        mciSendString("set cdaudio door open", 0, 0, 0);
        mciSendString("close cdaudio", 0, 0, 0);
    }
    

    das is jetzt mal die kurze Version.
    is auch mehr ein Fun-Prog^^

    jedenfalls, die MessageBox habe ich jetzt in .Net, auch das mit if und else.
    mein Problem ist, wie bekomme ich das Laufwerk auf/zu?

    ich habe bei meiner Such System::IO::DriveInfo gefunden,
    aber da kann ich leider nur Daten über die Laufwerke abfragen.

    ich dachte mir also, guckste erstmal nach CD-Laufwerken:

    DriveInfo^ diDriveInfo;
    cli::array<DriveInfo^, 1>^ aDrives = diDriveInfo->GetDrives();
    for each (DriveInfo^ diDrive in aDrives)
    {
    	if (diDrive->DriveType == DriveType::CDRom)
    	{
    		MessageBox::Show(diDrive->Name + " ist ein CD/DVD-Laufwerk!", "CD/DVD-Laufwerk gefunden!", MessageBoxButtons::OK, MessageBoxIcon::Information, MessageBoxDefaultButton::Button1, MessageBoxOptions::DefaultDesktopOnly, false);
    		break;
    	}
    }
    

    das break is nur, weil ich will ja nicht, dass alle Laufwerke aufgehen^^

    naja, also Frage 2: wie kann ich ein Laufwerk öffnen/schließen?

    thx im Voraus

    MfG DrakoXP





  • danke erstmal für die Antwort, aber:

    DeviceIOControl kenne ich, ahbe ich auch schon benutzt, aber ich wollte es komplett mit .NET machen und da hilft mir das auch nicht weiter

    .... andere Frage^^
    kann ich bei .NET trotzdem noch WinAPI & Co. einbinden?
    dann könnte ich ja DeviceIOControl nutzen



  • Ja natürlich kannst Du noch Win32 und native Code in C++/CLI verwenden! Dazu wurde die Sprache ja schliesslich geschaffen! (Sonst könnte man ja alles in C# machen, oder?)



  • hm, habe das jetzt probiert...

    der Compiler hat nicht gemeckert...

    aber das Laufwerk hat sich trotzdem nicht geöffnet und die MessageBox hat immer noch den alten Stil 😞



  • also das mit dem Laufwerk hat sich erledigt^^

    diDrive->Name
    

    hängt hinten an das Laufwerk noch nen Backslash an, und das war zu viel
    für das arme CreateFile...

    hab den Backslash noch von Hand abgeschitten und jetzt gehts 😃

    nur der Style is halt noch der alte 😞



  • Für den XP-Style brauchst Du ein Manifest für die Common-Controls-v6...



  • Guckst du oben:

    DrakoXP schrieb:

    das Manifest brauche ich ja nicht, weil das der Linker automatisch reinbaut

    damit wäre das ja geklärt...
    ich nutze übrigens Visual Studio Codename Orcas Beta 1 Professional.
    (nur, wen es interessiert^^)

    und da gibt es das Manifest-Tool und da steht bei mir: Manifest automatisch einbinden



  • Ja... und dazu brauchst Du die obigen Codezeilen...

    #if defined _M_IX86 
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    #elif defined _M_IA64 
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    #elif defined _M_X64 
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    #else 
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 
    #endif
    


  • die habe ich auch drinenn, hilft alles nix, InitCommonControls nutze ich auch, und comctl32.lib hab ich auch dazugelinkt



  • weiß keiner, wie man mit .NET-Mitteln den XP-Stil aktivieren kann?



  • hab die Lösung selbst gefunden:

    System::Windows::Forms::Application::EnableVisualStyles();
    


  • Hättest Du die Windows-Forms-Applikcation mit dem Wizard erzeugt, wäre die Zeile drin gewesen 😉
    Habs aber auch wieder vergessen... 🙄



  • ich mag keine Wizards xD
    da verlernt man das richtige Programmieren xD

    das hat mich auch so bei der MFC gestört:

    man hatte am Ende ein zwar ein tolles Programm mit sonst wie vielen Codezeilen,
    aber gerade mal 10% davon hat man selbst eingetippt.

    vom Rest weiß man vielleicht nicht mal was der tut.


Anmelden zum Antworten