 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.10.2004, 12:55 Titel: Dialoge |
|
|
1. Wenn ich einen neuen Dialog ersatellen (in Vc++ als Ressource) und ien neues Elemnt einfügen will, kommt einen Auswahl von Active X Steuerelemente ( bestimmt ca. 50 Stück). Im meinen tollen neuen PetzoldBuch werden aber nur wenige Beschrieben und die haben anderer Namen. LABEL statt CTEXT und ICON hab ich noch gar nicht gefunden.
In dem Buch werdfen so ca. 10 Stück behaldelt, die wichtigsten. Kann man jetzt sowas wie in VisualBasic machen, das man eine Leiste mit diesen ca. 10 am Rand hat und sie so ohne lange Suchen einfügen kann?
2. Mein hübscher Dialog wird leider nicht angeziegt! Woran kann das liegen? Beim dem Menü lag es daran, dss der Menüname falsch war, mit ner StringID gings aber. Darauf hab ich dann auch beim Dialog geachtet, aber es geht einfach nicht! Die DialogProcedure hab ich 1zu1 aus dem Petzold Buch übernommen, daran wirds wohl also auch nicht liegen. Weiß jemand noch ne Idee? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.10.2004, 14:12 Titel: |
|
|
ich kann ja auch mal den Code posten:
main:
Code: |
#define _WIN32_WINNT 0x500//Für das Mausrad
#include <windows.h>
#include <stdio.h>
#include "resource.h"
/* First Windows Prgoramm by Jonathan Klein
--------------------------------------------
*/
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASS wndClass;
wndClass.style=CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc=WndProc;
wndClass.cbClsExtra=0;
wndClass.cbWndExtra=0;
wndClass.hInstance=hInstance;
wndClass.hIcon=LoadIcon(NULL, "Icon");
wndClass.hCursor=LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName="Menu";
wndClass.lpszClassName="Windows Program";
RegisterClass(&wndClass);
hWnd=CreateWindow("Windows Program", "Nice Title, huh?",
WS_OVERLAPPEDWINDOW | WS_VSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT, // ah, cool, a default Window...
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd, iCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDC; //DeviceContex handel
static int iTextSizeX, iTextSizeY;
static int iDeltaPerLine, iAccumDelta;//Für das Mausrad
static HINSTANCE hInstance;
int iXPos=0, iYPos=0;
int WindowsSizeX=0, WindowSizeY=0;
int iScroll=0;
PAINTSTRUCT ps;
SCROLLINFO si;
TEXTMETRIC tm;
FILE *Datei=NULL;
char Puffer[256];
switch(message)
{
case WM_CREATE:
hDC=GetDC(hWnd);
GetTextMetrics(hDC, &tm);
iTextSizeX=tm.tmAveCharWidth;
iTextSizeY=tm.tmHeight+tm.tmExternalLeading;
ReleaseDC(hWnd, hDC);
//Den Schieberegler "kalibireiren"
si.nMin=0;
si.nMax=40;
si.nPage=6;
si.cbSize=sizeof(si);
si.fMask=SIF_RANGE | SIF_POS | SIF_PAGE;
si.nPos=0;
SetScrollInfo(hWnd, SB_VERT, &si, true);
hInstance=((LPCREATESTRUCT) lParam)->hInstance;
//Testweise:
SendMessage(hWnd, WM_SETTINGCHANGE, 0, 0);
break;
case WM_SETTINGCHANGE:
ULONG ulScrollLines;
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &ulScrollLines, 0);
if(ulScrollLines)//Wenns nicht 0 sit
{
iDeltaPerLine=WHEEL_DELTA/ulScrollLines;
}
else
{
iDeltaPerLine=0;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
hDC=BeginPaint(hWnd, &ps);//Die Textdatei "Text.txt" anzeigen:
Datei=fopen("Text.txt", "rt");
if(NULL==Datei)
{
MessageBox(hWnd, "Text.txt wurde nicht gefunden...", "Fehler!", MB_OK);
}
else
{
GetScrollInfo(hWnd, SB_VERT, &si);
iXPos=iTextSizeX;
iYPos=-iTextSizeY*si.nPos;
while(!feof(Datei))
{
fgets(Puffer, 255, Datei);
//Das Zeichenumstaltzeichen löschen:
if('\n'==Puffer[strlen(Puffer)-1])
{
Puffer[strlen(Puffer)-1]='\0';
}
TextOut(hDC, iXPos, iYPos, Puffer, strlen(Puffer));
iYPos+=iTextSizeY;
}
fclose(Datei);
}
char Text[32];
sprintf(Text, "%d", si.nPos);
TextOut(hDC, 0, 0, Text, strlen(Text));
EndPaint(hWnd, &ps);
break;
case WM_VSCROLL:
si.fMask=SIF_ALL;
GetScrollInfo(hWnd, SB_VERT, &si);
switch(LOWORD(wParam))
{
case SB_LINEUP:
si.nPos--;
break;
case SB_LINEDOWN:
si.nPos++;
break;
case SB_THUMBTRACK:
si.nPos=si.nTrackPos;
break;
}
SetScrollInfo(hWnd, SB_VERT, &si, true);
//Dafür sorgen das WM_APINT aufgerufen wird:
InvalidateRect(hWnd, NULL, true);
UpdateWindow(hWnd);
break;
case WM_MOUSEWHEEL:
if(!iDeltaPerLine)//Wenns Null ist abbrechen!
{
MessageBox(hWnd, "Mist", "Mist", MB_OK);
break;
}
iAccumDelta+=(short)HIWORD(wParam);
while(iAccumDelta>=iDeltaPerLine)
{
SendMessage(hWnd, WM_VSCROLL, SB_LINEUP, 0);
iAccumDelta-=iDeltaPerLine;
}
while(iAccumDelta<=iDeltaPerLine)
{
SendMessage(hWnd, WM_VSCROLL, SB_LINEDOWN, 0);
iAccumDelta+=iDeltaPerLine;
}
break;
case WM_HELP:
MessageBox(NULL, "No, this is just a funny Button to make you helpless...", "Hilfe:", 0);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOPEN:
MessageBox(hWnd, "geht noch nicht...", "Error Nr. 3427", MB_OK);
break;
case IDCANCEL:
MessageBox(hWnd, "Du hast es so gewollt...", "Beendungsprozedur 215,4", MB_OK);
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
case IDABOUT:
DialogBox(hInstance, MAKEINTRESOURCE(ID_ABOUTDIALOG), hWnd, AboutDlgProc);
break;
};
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
MessageBox(hDlg, "gestartet", "Informationsbaltt NR. 705", MB_OK);
return true;
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg, 0);
return true;
break;
}
break;
}
return false;
}
|
Ressourcendatei:
Code: |
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Deutsch (Deutschland) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
MENU MENU DISCARDABLE
BEGIN
POPUP "Datei"
BEGIN
MENUITEM "Öffnen", IDOPEN
MENUITEM "Beenden", IDCANCEL
END
POPUP "Hilfe"
BEGIN
MENUITEM "About", IDABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
ICON ICON DISCARDABLE "icon1.ico"
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
ID_ABOUTDIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 179
TOPMARGIN, 3
BOTTOMMARGIN, 83
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
ID_ABOUTDIALOG DIALOG DISCARDABLE 0, 0, 186, 90
STYLE DS_MODALFRAME | WS_POPUP
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,65,65,50,14
CONTROL "",IDC_LABEL1,"{978C9E23-D4B0-11CE-BF2D-00AA003F40D0}",
0x0,35,30,110,10
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog Info
//
ID_ABOUTDIALOG DLGINIT
BEGIN
IDC_LABEL1, 0x376, 80, 0
0x0000, 0x0000, 0x0200, 0x0038, 0x002b, 0x0000, 0x0000, 0x0000, 0xe9ec,
0x00d8, 0x001f, 0x8000, 0x7250, 0x676f, 0x6172, 0x6d6d, 0x6569, 0x7472,
0x7620, 0x6e6f, 0x4a20, 0x6e6f, 0x7461, 0x6168, 0x206e, 0x6c4b, 0x6965,
0x006e, 0x110e, 0x0000, 0x01a7, 0x0000, 0x0200, 0x000c, 0x0034, 0x0000,
0x00a5, 0x0000, 0x0200, 0x0000,
0
END
#endif // Deutsch (Deutschland) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
|
Braucht ihr noch was? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
schneidi74 Senior JLI'ler

Anmeldedatum: 14.05.2004 Beiträge: 243
Medaillen: Keine
|
Verfasst am: 27.10.2004, 15:09 Titel: |
|
|
Hallo Jonathan,
also ich hab in meiner WinMain-Schleife gleich als erstes den Aufruf für den Dialog:
Code: |
if(showStartDlg(hInstance) != IDOK)
{
return -1;
}
|
Wenn der Dialog abgebrochen wird, wird dann nämlich gleich der Rest des Programms auch abgebrochen.
Klickt man auf OK geht's dann ganz normal weiter mit dem Hauptfenster. Das funktioniert echt gut. _________________ -+- SchNeiDi74 -+-
-+- www.creative-games.de -+- |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.10.2004, 15:35 Titel: |
|
|
hm, eben dieses Buch hab ich ja, aber es geht nicht... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.10.2004, 15:51 Titel: |
|
|
ok, ich hab mal meine Ressourcendatei in ein Beispielprog eingefügt, ging auch nicht. Alos hab ich die Datei gelöscht und ne neuegemacht, jetzt geht es! Keine Ahnung warum, aber egal. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.10.2004, 16:12 Titel: |
|
|
ne, das wars nicht. Ich hab jetzt herausgefunde, das es an den ActiveX Steuerelementen liegt. Ich hab einen Standard Diealo (so einen wo schon OK und Abbrechen als Button ist) genommen, der ging. Dann wollt ich per Label einen Text reinsetzten, und schon gings nicht mehr! Wie kann ich die ganz normalen Steuerelemente einsetzten, ohne ActiveX? Das Bcuh ist halt von 98, da gabs noch kein VC++ 6.0. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 27.10.2004, 16:17 Titel: |
|
|
Dann sag mir mal was Du für ne Version vom Buch hast? Jede Version des Buches vom Petzold war für VC++6 ausgelegt und auf UNICODE. (Gibt es nur für NT Kernel und hat nichts mit 9x zu tun) ActiveX? Wird doch für Dialoge gar nicht mehr benutzt, ist doch total veraltet.
- Patrick _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.10.2004, 16:25 Titel: |
|
|
Ich hab die 5 Auflage
Aber Glücklicherweise hab ich eine halbLösung gefunden. Wenn ich auf Ansich-GanzerBildschirm klicke, sehe ich den dialog mitsamt einem netten Fenster Namens Steuerelemente. Da hab ich meine ca. 10 und kann sie ganz einfach einsetzten und alles funktioniert wunderbar.
Bis darauf das ich immer in den Vollbildmodus wechsel muss. Im nromalen Modus hab ich das Fenster noch nie zu sehen bekommen. Da ist immer nur der Dialog und die einzige Möglichkeit was hinzuzufügen ost, per Rechtsklick ein Menü zu öffnen und da "ActiveX Steuerelement hinzufügen" anzuklicken. Keine Ahnung warum dasso ist. Ist das bei irgendjemanden anders? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|