Adrianistán

Programando para Haiku - Barras de menús - Parte III

17/08/2016
Seguimos con los tutoriales de Haiku, hoy veremos como crear barras de menú. Partimos del código de la ventana vacía, lo tienes en la foto junto con el comando de compilación.

MiAplicacionHaikuCodigo Haz click en la imagen para verlo en grande

Debemos saber que en la API de BeOS hay tres clases que nos van a servir.

En la imagen se puede ver perfectamente

BMenu

Vamos a crear una barra de menú con dos menús, uno de ellos simple y otro con un menú anidado y un separador.


#include <AppKit.h>
#include <InterfaceKit.h>
#include <InterfaceDefs.h>

#define NEW_FILE 3
#define EXPORT_AS 5

class VentanaPrueba : public BWindow{
public:
VentanaPrueba() : BWindow(BRect(100,100,900,700),"Mi ventana",B_TITLED_WINDOW,0){
AddChild(CreateMenuBar());
}
bool QuitRequested(){
be_app_messenger.SendMessage(B_QUIT_REQUESTED);
return BWindow::QuitRequested();
}
void MessageReceived(BMessage* msg){
switch(msg->what){
default:
BWindow::MessageReceived(msg);
}
}
BMenuBar* CreateMenuBar(){
BMenuBar* bar = new BMenuBar(BRect(0,0,100,20),"MenuBar");

BMenu* file = new BMenu("File");
BMenu* help = new BMenu("Help");
BMenu* exportMenu = new BMenu("Export");

bar->AddItem(file);
bar->AddItem(help);

/* FILE */
BMenuItem* newFile = new BMenuItem("New file",new BMessage(NEW_FILE));
newFile->SetShortcut('N',B_COMMAND_KEY);
file->AddItem(newFile);

file->AddItem(exportMenu);
file->AddSeparatorItem();

BMenuItem* quit = new BMenuItem("Quit",new BMessage(B_QUIT_REQUESTED));
quit->SetShortcut('Q',B_COMMAND_KEY);
file->AddItem(quit);

/* EXPORT */
BMenuItem* exportAs = new BMenuItem("Export as...",new BMessage(EXPORT_AS));
exportMenu->AddItem(exportAs);

/* HELP */
BMenuItem* helpVersion = new BMenuItem("Help",NULL);
help->AddItem(helpVersion);

return bar;
}
};

class AplicacionPrueba : public BApplication{
public:
VentanaPrueba* ventana;
AplicacionPrueba() : BApplication("application/x-aplicacion-prueba"){
ventana = new VentanaPrueba();
ventana->Show();
}
};

int main(int argc, char** argv){
AplicacionPrueba app;
return app.Run();
}


Y el resultado es el siguiente:

BMenuBar

Como vemos, SetShortcut hace que los menús sean seleccionables con combinaciones de teclado. Hay que tener en cuenta que en BeOS, la tecla que en Windows normalmente Ctrl, es Alt. Así operaciones como copiar y pegar con Alt+C y Alt+V. Para responder al evento solo hace falta escuchar en la función MessageReceived. En el caso de B_QUIT_REQUESTED, el mensaje ya está implementado en la función QuitRequested.
Tags: api programacion beos menu gui tutorial menubar cpp haiku