Hallo,
jetzt sind noch einige Fragen zur WIMP-Programmierung (RISC OS & C)
aufgekommen, die ich bisher nicht zufriedenstellend beantworten konnte.
Deshalb meine Fragen in die Runde.
Den bisherigen Stand der Arbeiten an den Templates (Vorlagen) findet ihr
hier:
http://home.chiemgau-net.de/ausserstorfer/Temp/wimp_load_template.zip
(23 kB)
Da die Datei so unglaublich groß ist, will ich sie nicht direkt dieser
E-Mail anhängen, um damit nicht eure Postfächer zuzumüllen.
Hier erstmal der Quellcode, zu dem Fragen aufgetaucht sind:
#include "oslib/wimp.h"
#include <stdbool.h>
#include "stdlib.h"
int main()
{
// richte Aufgabe ein (Anmeldung an RISC OS)
wimp_version_no version_out;
wimp_t task_handle;
task_handle=wimp_initialise(310, "Hallo Welt!!!", NULL,
&version_out);
// Lade Vorlage
wimp_open_template ("8_Vorlagen");
// richte benötigte Variablen ein
wimp_window *window;
int used, data_used;
char *data;
char name[11]="main";
int context;
// hole Größe des benötigten Arbeitsspeichers für Fenster- // Vorlage
context = wimp_load_template (wimp_GET_SIZE, NULL, NULL,
wimp_NO_FONTS, name, 0, &used, &data_used);
// reserviere benötigten Speicher
window = malloc (used);
data = malloc (data_used);
// lade Vorlage in den Speicher
context = wimp_load_template (window, data, (char const *) data +
data_used, wimp_NO_FONTS, name,0, NULL, NULL);
// Schließe Vorlage
wimp_close_template ();
// Erzeuge Fenster aus Arbeitsspeicher
wimp_block block;
block.open.w = wimp_create_window (window);
block.open.visible.x0 = window->visible.x0;
block.open.visible.y0 = window->visible.y0;
block.open.visible.x0 = window->visible.x0;
block.open.visible.y0 = window->visible.y0;
block.open.visible.x1 = window->visible.x1;
block.open.visible.y1 = window->visible.y1;
block.open.xscroll = window->xscroll;
block.open.yscroll = window->yscroll;
block.open.next = window->next;
// öffne Fenster
wimp_open_window (&(block.open));
// Datenblock für Symbol (Auslesen, Zustand)
wimp_icon_state icon_state;
icon_state.w = block.open.w;
icon_state.i = 0;
// Zustand des Symbols[0] auslesen
wimp_get_icon_state(&icon_state);
// Text des Symbols ändern
strncpy(icon_state.icon.data.indirected_text.text , "Kernschleife\0",
strlen(icon_state.icon.data.indirected_text.text));
// Variablen für wimp_poll_Schleife (Kernschleife)
wimp_event_no event;
wimp_poll_flags mask = 1;
osbool quit_pending = FALSE;
// Kernschleife des Programms
while (!quit_pending)
{
event = wimp_poll(mask, &block, NULL);
switch (event)
{
case wimp_OPEN_WINDOW_REQUEST:
wimp_open_window(&(block.open));
break;
case wimp_CLOSE_WINDOW_REQUEST:
wimp_close_window(block.close.w);
quit_pending = true;
break;
case wimp_USER_MESSAGE:
case wimp_USER_MESSAGE_RECORDED:
if (block.message.action == message_QUIT)
{
quit_pending = true;
break;
}
}
}
wimp_close_down(task_handle);
return 0;
}
Attachment:
signature.asc
Description: PGP signature