2017-01-13 1 views
1

je ne trouve pas une documentation, donc je voudrais avoir le code équivalent à:Comment ouvrir une nouvelle fenêtre en C++ dans Carbon sur un Mac?

#include <carbon.h> 

int main() { 
    carbon::Window win1 = carbon::openWindow(10,10,640,480); 
    win1.setVisible(true); 
    return 0; 
} 

Le problème est, avec des recherches sur Google et Stack Overflow je ne trouve pas les éléments nécessaires pour le faire.

+0

Qu'entendez-vous par «équivalent à»? Quel est le problème avec le code tel qu'il est écrit? –

+0

Mon code ne compilera pas car ce ne sont pas ces fonctions et je ne connais pas les espaces de noms et les noms de fonctions pour le faire car il n'y a pas de documentation que j'ai trouvé pour le faire. –

+2

@CrearoLisifi La raison pour laquelle vous n'avez trouvé aucune documentation est que l'intégralité de l'API Carbon a été abandonnée en 2012. –

Répondre

1

le problème est que les recherches dans google et débordement de la pile i n'a pas trouvé les éléments nécessaires pour le faire

carbone est un ancien cadre destiné à aider les développeurs transition de MacOS classique (à savoir les versions 9 .x et inférieur) à MacOS X. Comme Algirdas Preidžius souligne dans un commentaire, HIToolbox.framework, qui est la partie de carbone que vous utiliseriez pour créer des fenêtres et autres, était deprecated in MacOS X 10.7. Il est inutile d'essayer d'utiliser ces cadres maintenant. Mis à part cela, votre exemple illustre une incompréhension fondamentale de ce qui est requis d'un programme avec une interface utilisateur graphique. Voici votre code:

int main() { 
carbon::Window win1 = carbon::openWindow(10,10,640,480); 
win1.setVisible(true); 
return 0; 
} 

Même si l'API Carbon devait correspondre à ce que vous avez ici (il est même pas proche), votre programme semble ne rien faire. Cela créerait une fenêtre et l'afficherait peut-être, mais ensuite il sortirait immédiatement, de sorte que la fenêtre n'apparaîtrait jamais sur l'écran, ou pourrait clignoter sur l'écran et disparaître si vite que vous ne la verriez probablement pas. Les programmes avec une interface graphique passent presque tout leur temps à attendre que l'utilisateur fasse quelque chose, comme déplacer la souris ou appuyer sur le bouton de la souris ou appuyer sur une touche du clavier ou insérer une disquette (souvenez-vous, nous parlons ici old school). Pour faciliter cela, le cœur de toute application GUI est la boucle d'événements . Dans les premiers jours avant qu'il ne soit même appelé "MacOS", le système d'exploitation Macintosh ne pouvait exécuter qu'un programme à la fois, et ce programme devait interroger le système d'exploitation pour obtenir chaque nouvel événement, donc le cœur de l'application ressemblait à ceci :

EventRecord theEvent; 
EventMask eventMask = everyEvent; 
while (!quitting) { 
    GetNextEvent(eventMask, &eventRecord); 
    switch (eventRecord.what) { 
     case keyDown: { 
      // do something with the key in the event 
     } 
     case keyUp: { 
      // do something with the key in the event 
     } 
     case autoKey: { 
      // do something with the key in the event 
     } 
     case mouseDown: { 
      // do something with the mouse position in the event 
     } 
     case mouseUp: { 
      // do something with the mouse position in the event 
     } 
     // ...and so on... 
    } 
} 

Ce fut la boucle d'événements . Dans les versions ultérieures, le système d'exploitation changeait pour permettre l'exécution simultanée de plusieurs applications. La boucle d'événements était donc basée sur une fonction appelée WaitNextEvent() au lieu de GetNextEvent(), la principale différence étant que WNE bloquait si aucun événement n'était disponible. Lorsque Carbon est apparu, le style a changé de nouveau - cette fois la boucle d'événement était gérée par le système d'exploitation, et les programmes enregistraient simplement les fonctions de rappel pour tous les événements qui les intéressaient (ce qui correspond à peu près au fonctionnement des applications Microsoft Windows) , et ces gestionnaires seraient appelés comme ils étaient nécessaires. Tout ceci est vraiment juste pour expliquer qu'il y a beaucoup plus dans une application GUI que ce que vous avez indiqué - vous ne créez pas seulement une fenêtre, vous devez également en prendre soin. Votre intention n'est pas claire à partir de votre question, mais quoi que vous essayiez de faire, Carbon n'est certainement pas la réponse. Si vous voulez créer une application de base, créer un nouveau projet macOS dans Xcode vous donnera tout ce dont vous avez besoin. Si vous voulez utiliser C++ dans votre application, sachez que vous pouvez facilement combiner C++ avec Objective-C, et que l'intégration avec le code Swift devrait également être assez simple.