006
10.01.2003, 16:20 Uhr
void*
Generic Pointer (Operator)
|
Eigentlich sollte nach einem Testlauf jetzt das Anwendungssymbol in gewünschter Form erscheinen, gleichzeitig wurde der erzeugten Exe-Datei unser Icon zugewiesen, was ein Blick in den Exepfad zeigt. Um einen eigenen Cursor zu laden, ist die Vorgehensweise analog zum laden eines Icon. Die entsprechende Zeile in der *.rc Datei gestaltet sich dann so:
C++: |
#include "resource.h"
IDI_ICON ICON DISCARDABLE "api.ico" IDC_HAND CURSOR DISCARDABLE "hand.cur" ............. .............
|
Der Header sieht dann so aus:
C++: |
// resource.h
#define IDI_ICON 101 #define IDC_HAND 105 #define ID_NEU 300 #define ID_OEFFNEN 301 #define ID_SPEICHERN 302 #define ID_BEENDEN 303 #define ID_ITEM1 304 #define ID_ITEM2 305 #define ID_ITEM3 306
|
Um den Cursor im Programm zu laden schreiben wir unsere WinMain() - Funktion etwas um:
C++: |
............. ............. WNDCLASSEX wc={0};
wc.cbSize= sizeof (WNDCLASSEX); static char szAppName[]= "Menü Erstellung"; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
//wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hCursor =LoadCursor(wc.hInstance,(LPCTSTR)IDC_HAND);
//der Cursor wurde umgeändert
wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wc.lpszMenuName = "USERMENUE"; wc.lpszClassName = szAppName; //wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wc.hIconSm = LoadIcon(wc.hInstance, (LPCTSTR)IDI_ICON);
RegisterClassEx(&wc); ............ ............
|
Wenn jetzt mit der Maus in den Arbeitsbereich des Fensters gegangen wird, sollte der neue Cursor eigentlich dargestellt werden. Es folgen erst einmal die Listings für die einzelnen Dateien:
C++: |
// menue.cpp #include <windows.h>
// Den Header für die Resourcen einbinden
#include "resource.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MSG msg;
WNDCLASSEX wc={0};
wc.cbSize= sizeof (WNDCLASSEX); static char szAppName[]= "Menü Erstellung"; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
// Handle für unser Menü setzten
wc.lpszMenuName = "USERMENUE"; wc.lpszClassName = szAppName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wc);
HWND hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, szAppName, "Menü Erstellung", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0)== TRUE) { TranslateMessage(&msg); DispatchMessage(&msg); }
return msg.wParam; }
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{ HDC hdc; PAINTSTRUCT paintstruct; switch(message) { case WM_PAINT: hdc = BeginPaint (hwnd, &paintstruct);
// Einen Text im Anwendungsfenster ausgeben
TextOut (hdc, 250, 200, "Eigene Menüs erzeugen.", 22);
EndPaint (hwnd, &paintstruct); return 0;
// Jetzt die Behandlungsroutine für WM_COMMAND
case WM_COMMAND: switch(LOWORD(wParam)) { case ID_NEU:
/* Auf den Eintrag "Datei/Neu" geklickt ? Dann eine Nachrichtenbox ausgeben. Dient als Vorbereitung für spätere Lektionen, wo die Buttons zum leben erweckt werden */
MessageBox(NULL, "Button 'Neu' geklickt", "Menütest", MB_OK); return 0; case ID_OEFFNEN: MessageBox(NULL, "Button 'Öffnen' geklickt", "Menütest", MB_OK); return 0; case ID_SPEICHERN: MessageBox(NULL, "Button 'Speichern' geklickt", "Menütest", MB_OK); return 0; case ID_BEENDEN: MessageBox(NULL, "Button 'Beenden' geklickt - Programm wird beendet", "Menütest",MB_OK);
/* Nachdem bei der Nachrichtenbox auf "OK" geklickt wurde - Raus aus unserer Anwendung */
SendMessage(hwnd, WM_CLOSE, 0, 0); return 0;
/* Es folgen ein paar Spielchen mit SetWindowText() */
case ID_ITEM1: SetWindowText(hwnd, "Diesen Text in die Titelleiste"); return 0; case ID_ITEM2: SetWindowText(hwnd, "Und jetzt diesen Text"); return 0; case ID_ITEM3: SetWindowText(hwnd, ""); return 0; } return 0;
case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam); }
|
-- Gruß void* |