mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-12-23 00:30:17 +00:00
cdf1cb9106
. Win32Frame: remove WM_USER_RESTART.
194 lines
6.2 KiB
C++
194 lines
6.2 KiB
C++
#pragma once
|
|
|
|
#include "FrameBase.h"
|
|
#include "DiskImage.h"
|
|
|
|
class Video;
|
|
|
|
#if 0 // enable non-integral full-screen scaling
|
|
#define FULLSCREEN_SCALE_TYPE float
|
|
#else
|
|
#define FULLSCREEN_SCALE_TYPE int
|
|
#endif
|
|
|
|
// 3D border around the 560x384 Apple II display
|
|
#define VIEWPORTX 5
|
|
#define VIEWPORTY 5
|
|
|
|
#define BUTTONX (g_nViewportCX + VIEWPORTX*2)
|
|
#define BUTTONY 0
|
|
#define BUTTONCX 45
|
|
#define BUTTONCY 45
|
|
#define BUTTONS 8
|
|
|
|
|
|
class Win32Frame : public FrameBase
|
|
{
|
|
public:
|
|
Win32Frame();
|
|
|
|
static Win32Frame& GetWin32Frame();
|
|
static LRESULT CALLBACK FrameWndProc(HWND window, UINT message, WPARAM wparam, LPARAM lparam);
|
|
|
|
virtual void FrameDrawDiskLEDS();
|
|
virtual void FrameDrawDiskStatus();
|
|
|
|
virtual void FrameRefreshStatus(int drawflags);
|
|
virtual void FrameUpdateApple2Type();
|
|
virtual void FrameSetCursorPosByMousePos();
|
|
|
|
virtual void SetFullScreenShowSubunitStatus(bool bShow);
|
|
virtual bool GetBestDisplayResolutionForFullScreen(UINT& bestWidth, UINT& bestHeight, UINT userSpecifiedHeight = 0);
|
|
virtual int SetViewportScale(int nNewScale, bool bForce = false);
|
|
virtual void SetAltEnterToggleFullScreen(bool mode);
|
|
|
|
virtual void SetLoadedSaveStateFlag(const bool bFlag);
|
|
|
|
virtual void Initialize(void);
|
|
virtual void Destroy(void);
|
|
virtual void VideoPresentScreen(void);
|
|
|
|
virtual int FrameMessageBox(LPCSTR lpText, LPCSTR lpCaption, UINT uType);
|
|
virtual void GetBitmap(LPCSTR lpBitmapName, LONG cb, LPVOID lpvBits);
|
|
virtual BYTE* GetResource(WORD id, LPCSTR lpType, DWORD expectedSize);
|
|
virtual void Restart();
|
|
|
|
bool GetFullScreenShowSubunitStatus(void);
|
|
int GetFullScreenOffsetX(void);
|
|
int GetFullScreenOffsetY(void);
|
|
bool IsFullScreen(void);
|
|
void FrameRegisterClass();
|
|
void FrameCreateWindow(void);
|
|
void ChooseMonochromeColor(void);
|
|
UINT Get3DBorderWidth(void);
|
|
UINT Get3DBorderHeight(void);
|
|
int GetViewportScale(void);
|
|
void GetViewportCXCY(int& nViewportCX, int& nViewportCY);
|
|
|
|
void ApplyVideoModeChange(void);
|
|
|
|
HDC FrameGetDC();
|
|
void FrameReleaseDC();
|
|
|
|
bool g_bScrollLock_FullSpeed;
|
|
|
|
private:
|
|
static BOOL CALLBACK DDEnumProc(LPGUID lpGUID, LPCTSTR lpszDesc, LPCTSTR lpszDrvName, LPVOID lpContext);
|
|
LRESULT WndProc(HWND window, UINT message, WPARAM wparam, LPARAM lparam);
|
|
|
|
void videoCreateDIBSection(Video& video);
|
|
void VideoDrawLogoBitmap(HDC hDstDC, int xoff, int yoff, int srcw, int srch, int scale);
|
|
bool DDInit(void);
|
|
void DDUninit(void);
|
|
|
|
void Benchmark(void);
|
|
void DisplayLogo(void);
|
|
void FrameDrawDiskLEDS(HDC hdc); // overloaded Win32 only, call via GetWin32Frame()
|
|
void FrameDrawDiskStatus(HDC hdc); // overloaded Win32 only, call via GetWin32Frame()
|
|
void EraseButton(int number);
|
|
void DrawButton(HDC passdc, int number);
|
|
void DrawCrosshairs(int x, int y);
|
|
void DrawFrameWindow(bool bPaintingWindow = false);
|
|
void DrawStatusArea(HDC passdc, int drawflags);
|
|
void Draw3dRect(HDC dc, int x1, int y1, int x2, int y2, BOOL out);
|
|
void DrawBitmapRect(HDC dc, int x, int y, LPRECT rect, HBITMAP bitmap);
|
|
void ProcessButtonClick(int button, bool bFromButtonUI = false);
|
|
bool ConfirmReboot(bool bFromButtonUI);
|
|
void ProcessDiskPopupMenu(HWND hwnd, POINT pt, const int iDrive);
|
|
void RelayEvent(UINT message, WPARAM wparam, LPARAM lparam);
|
|
void SetFullScreenMode();
|
|
void SetNormalMode();
|
|
void SetUsingCursor(BOOL bNewValue);
|
|
void SetupTooltipControls(void);
|
|
void FrameResizeWindow(int nNewScale);
|
|
void RevealCursor();
|
|
void ScreenWindowResize(const bool bCtrlKey);
|
|
void UpdateMouseInAppleViewport(int iOutOfBoundsX, int iOutOfBoundsY, int x=0, int y=0);
|
|
void DrawCrosshairsMouse();
|
|
void FrameSetCursorPosByMousePos(int x, int y, int dx, int dy, bool bLeavingAppleScreen);
|
|
void CreateGdiObjects(void);
|
|
void DeleteGdiObjects(void);
|
|
void FrameShowCursor(BOOL bShow);
|
|
void FullScreenRevealCursor(void);
|
|
void GetWidthHeight(int& nWidth, int& nHeight);
|
|
|
|
bool g_bAltEnter_ToggleFullScreen; // Default for ALT+ENTER is to toggle between windowed and full-screen modes
|
|
bool g_bIsFullScreen;
|
|
bool g_bShowingCursor;
|
|
bool g_bLastCursorInAppleViewport;
|
|
UINT_PTR g_TimerIDEvent_100msec;
|
|
UINT g_uCount100msec;
|
|
COLORREF customcolors[256]; // MONOCHROME is last custom color
|
|
HBITMAP g_hLogoBitmap;
|
|
HBITMAP g_hDeviceBitmap;
|
|
HDC g_hDeviceDC;
|
|
LPBITMAPINFO g_pFramebufferinfo;
|
|
BOOL g_bUsingCursor; // TRUE = AppleWin is using (hiding) the mouse-cursor && restricting cursor to window - see SetUsingCursor()
|
|
bool g_bAppActive;
|
|
bool g_bFrameActive;
|
|
bool g_windowMinimized;
|
|
std::string driveTooltip;
|
|
bool g_bFullScreen_ShowSubunitStatus;
|
|
FULLSCREEN_SCALE_TYPE g_win_fullscreen_scale;
|
|
int g_win_fullscreen_offsetx;
|
|
int g_win_fullscreen_offsety;
|
|
|
|
static const UINT MAX_DRAW_DEVICES = 10;
|
|
char* draw_devices[MAX_DRAW_DEVICES];
|
|
GUID draw_device_guid[MAX_DRAW_DEVICES];
|
|
int num_draw_devices;
|
|
LPDIRECTDRAW g_lpDD;
|
|
|
|
HBITMAP buttonbitmap[BUTTONS];
|
|
|
|
HBRUSH btnfacebrush;
|
|
HPEN btnfacepen;
|
|
HPEN btnhighlightpen;
|
|
HPEN btnshadowpen;
|
|
int buttonactive;
|
|
int buttondown;
|
|
int buttonover;
|
|
int buttonx;
|
|
int buttony;
|
|
HDC g_hFrameDC;
|
|
RECT framerect;
|
|
|
|
BOOL helpquit;
|
|
HFONT smallfont;
|
|
HWND tooltipwindow;
|
|
int viewportx; // Default to Normal (non-FullScreen) mode
|
|
int viewporty; // Default to Normal (non-FullScreen) mode
|
|
|
|
RECT g_main_window_saved_rect;
|
|
int g_main_window_saved_style;
|
|
int g_main_window_saved_exstyle;
|
|
|
|
|
|
HBITMAP g_hCapsLockBitmap[2];
|
|
HBITMAP g_hHardDiskBitmap[2];
|
|
|
|
//Pravets8 only
|
|
HBITMAP g_hCapsBitmapP8[2];
|
|
HBITMAP g_hCapsBitmapLat[2];
|
|
//HBITMAP charsetbitmap [4]; //The idea was to add a charset indicator on the front panel, but it was given up. All charsetbitmap occurences must be REMOVED!
|
|
//===========================
|
|
HBITMAP g_hDiskWindowedLED[NUM_DISK_STATUS];
|
|
|
|
int g_nTrackDrive1;
|
|
int g_nTrackDrive2;
|
|
int g_nSectorDrive1;
|
|
int g_nSectorDrive2;
|
|
TCHAR g_sTrackDrive1[8];
|
|
TCHAR g_sTrackDrive2[8];
|
|
TCHAR g_sSectorDrive1[8];
|
|
TCHAR g_sSectorDrive2[8];
|
|
Disk_Status_e g_eStatusDrive1;
|
|
Disk_Status_e g_eStatusDrive2;
|
|
|
|
static const int kDEFAULT_VIEWPORT_SCALE = 2;
|
|
int g_nViewportCX;
|
|
int g_nViewportCY;
|
|
int g_nViewportScale; // saved REGSAVE
|
|
int g_nMaxViewportScale; // Max scale in Windowed mode with borders, buttons etc (full-screen may be +1)
|
|
};
|