S
Hi,
ich habe einen netten Screensaver programmiert und mich da an das Beispiel aus der MSDN gehalten. Der Saver läuft auch problemlos, leider wird der Konfigurationsdialog nicht angezeigt. Und das, obwohl ich bisher nur die Sachen aus der MSDN kopiert habe.
Hier die Dateien:
// SyMe.rc
#include "resource.h"
#include "afxres.h"
DLG_SCRNSAVECONFIGURE DIALOG 6, 18, 160, 63
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Einstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Wechselgeschwindigkeit",101,0,6,98,40
SCROLLBAR ID_SPEED,5,31,89,10
LTEXT "Schnell",103,6,21,30,8
LTEXT "Langsam",104,65,21,30,8
PUSHBUTTON "OK",ID_OK,117,10,40,14
PUSHBUTTON "Abbrechen",ID_CANCEL,117,32,40,14
END
ID_APP ICON DISCARDABLE "SyMe.ico"
// SyMe.def
NAME SYME.SCR
DESCRIPTION 'ScreenSaver'
STUB 'WINSTUB.EXE'
EXETYPE WINDOWS
CODE MOVEABLE
DATA MOVEABLE MULTIPLE
HEAPSIZE 1024
STACKSIZE 4096
EXPORTS
ScreenSaverProc
ScreenSaverConfigureDialog
// SyMe.cpp (Auszug)
#include "windows.h"
#include "scrnsave.h"
#include "resource.h"
#define MINVEL 1 /* minimum redraw speed value */
#define MAXVEL 10 /* maximum redraw speed value */
#define DEFVEL 5 /* default redraw speed value */
LONG lSpeed = DEFVEL; /* redraw speed variable */
extern HINSTANCE hMainInstance; /* screen saver instance handle */
//CHAR szAppName[80]; /* .ini section name */
CHAR szTemp[20]; /* temporary array of characters */
CHAR szRedrawSpeed[] = "Redraw Speed"; /* .ini speed entry */
BOOL WINAPI ScreenSaverConfigureDialog (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hSpeed; /* handle to speed scroll bar */
static HWND hOK; /* handle to OK push button */
::MessageBeep(MB_ICONEXCLAMATION);
switch(message)
{
case WM_INITDIALOG:
/* Retrieve the application name from the .rc file. */
LoadString(hMainInstance, idsAppName, szAppName, 40);
/* Retrieve the .ini (or registry) file name. */
LoadString(hMainInstance, idsIniFile, szIniFile,
MAXFILELEN);
/* Retrieve any redraw speed data from the registry. */
lSpeed = GetPrivateProfileInt(szAppName, szRedrawSpeed,
DEFVEL, szIniFile);
/*
* If the initialization file does not contain an entry
* for this screen saver, use the default value.
*/
if(lSpeed > MAXVEL || lSpeed < MINVEL)
lSpeed = DEFVEL;
/* Initialize the redraw speed scroll bar control. */
hSpeed = GetDlgItem(hDlg, ID_SPEED);
SetScrollRange(hSpeed, SB_CTL, MINVEL, MAXVEL, FALSE);
SetScrollPos(hSpeed, SB_CTL, lSpeed, TRUE);
/* Retrieve a handle to the OK push button control. */
hOK = GetDlgItem(hDlg, ID_OK);
::MessageBeep(MB_ICONEXCLAMATION);
return TRUE;
case WM_HSCROLL:
/*
* Process scroll bar input, adjusting the lSpeed
* value as appropriate.
*/
switch (LOWORD(wParam))
{
case SB_PAGEUP:
--lSpeed;
break;
case SB_LINEUP:
--lSpeed;
break;
case SB_PAGEDOWN:
++lSpeed;
break;
case SB_LINEDOWN:
++lSpeed;
break;
case SB_THUMBPOSITION:
lSpeed = HIWORD(wParam);
break;
case SB_BOTTOM:
lSpeed = MINVEL;
break;
case SB_TOP:
lSpeed = MAXVEL;
break;
case SB_THUMBTRACK:
case SB_ENDSCROLL:
return TRUE;
break;
}
if ((int) lSpeed <= MINVEL)
lSpeed = MINVEL;
if ((int) lSpeed >= MAXVEL)
lSpeed = MAXVEL;
SetScrollPos((HWND) lParam, SB_CTL, lSpeed, TRUE);
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_OK:
/*
* Write the current redraw speed variable to
* the .ini file.
*/
wsprintf(szTemp, "%ld", lSpeed);
WritePrivateProfileString(szAppName, szRedrawSpeed,
szTemp, szIniFile);
case ID_CANCEL:
EndDialog(hDlg, LOWORD(wParam) == ID_OK);
return TRUE;
}
}
return FALSE;
}
BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
return TRUE;
}
Ich hoffe, es kann mir jemand erklären woran das liegt und was ich anders machen muss.
Thanks im Voraus,
Shaggy