windows-nt/Source/XPSP1/NT/shell/applets/upgrade/dlgapp.h
2020-09-26 16:20:57 +08:00

113 lines
4.6 KiB
C++

#pragma once
#include "util.h"
#define WINDOW_CLASS TEXT("_WindowsUpgradeAdvisor_")
class CDlgApp
{
private:
HINSTANCE m_hInstance; // application instance
HWND m_hwnd; // window handle
HFONT m_hfontTitle;
HFONT m_hfontHeader;
HFONT m_hfontMenu;
HFONT m_hfontText;
HBRUSH m_hbrPanel;
HBRUSH m_hbrCenter;
COLORREF m_crTitleText;
COLORREF m_crHeaderText;
COLORREF m_crShadow;
COLORREF m_crNormalText;
COLORREF m_crCenterPanel; // Color of the center panel - only used for background colors behind text
COLORREF m_crBottomPanel; // Color of the bottom panel - only used for background colors behind text
HCURSOR m_hcurHand;
int m_cxClient; // width of the client area (changes on maximize / restore)
int m_cyClient; // height of the client area (changes on maximize / restore)
int m_cxTopPanel; // height of the top band of color
int m_cyBottomPanel; // height of the bottom band of color
int m_cTitleFontHeight;
int m_cHeaderFontHeight;
int m_cMenuFontHeight;
int m_cTextFontHeight;
HDC m_hdcFlag;
HDC m_hdcFlagRTL;
HDC m_hdcGradientTop;
HDC m_hdcGradientTop256;
HDC m_hdcGradientBottom;
HDC m_hdcGradientBottom256;
HDC m_rghdcArrows[2][6][2]; // {hicolor x locolor} x {back, next, finish, cancel, radio-on, radio-off} x {normal, hover}
BOOL m_f8by6; // true if we're 800x600, false if we're 640x480
DWORD m_dwScreen; // screen we're on
BOOL m_fHighContrast; // true if high contrast options should be used
BOOL m_fLowColor; // true if we are in 256 or less color mode.
HPALETTE m_hpal; // palette to use if in palette mode
int m_iColors; // -1, 16, or 256 depending on the color mode we are in.
int m_cDesktopWidth; // width of desktop at app initialization
int m_cDesktopHeight; // height of desktop at app initialization
int m_iSelectedItem; // the index of the selected menu
BOOL m_fDynamicUpdate; // does user want to connect to the internet?
public:
CDlgApp();
~CDlgApp();
void Register(HINSTANCE hInstance);
BOOL InitializeData(LPSTR pszCmdLine);
void Create(int nCmdShow);
void MessageLoop();
private:
static LRESULT CALLBACK s_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK s_ButtonWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK s_WaitWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
// Window Messages
LRESULT OnCreate(HWND hwnd);
LRESULT OnDestroy();
LRESULT OnActivate(WPARAM wParam);
LRESULT OnPaint(HDC hdc);
LRESULT OnEraseBkgnd(HDC hdc);
LRESULT OnLButtonUp(int x, int y, DWORD fwKeys);
LRESULT OnMouseMove(int x, int y, DWORD fwKeys);
LRESULT OnSetCursor(HWND hwnd, int nHittest, int wMouseMsg);
LRESULT OnCommand(int wID);
LRESULT OnQueryNewPalette();
LRESULT OnPaletteChanged(HWND hwnd);
LRESULT OnDrawItem(UINT iCtlID, LPDRAWITEMSTRUCT pdis);
LRESULT OnChangeScreen(DWORD dwScreen);
LRESULT OnLaunchApp();
LRESULT OnNextButton();
// helper functions
void _InvalidateRectIntl(HWND hwnd, RECT* pRect, BOOL fBackgroundClear);
BOOL _SetColorTable();
BOOL _CreateFonts(HDC hdc);
BOOL _CreateBitmaps();
BOOL _CreateArrowBitmaps();
BOOL _CreateGradientBitmaps();
void _DrawText(HDC hdc);
void _PaintFlagBitmap();
BOOL _AdjustIconPlacement();
BOOL _GetButtonIntersect(int x, int y, UINT* pidMenuItem);
UINT _StringWidth(HDC hdc, UINT idString, INT iLogPixelSx);
UINT _StringHeight(HDC hdc, UINT idString, INT iLogPixelSx);
BOOL _AdjustToFitFonts();
BOOL _DrawMenuIcon(HWND hwnd);
BOOL _DrawMenuIcons(BOOL fEraseBackground);
void _CreateMenu();
void _RedrawMenu();
};