mirror of
https://github.com/reactos/reactos.git
synced 2025-07-27 19:41:40 +00:00
[MAGNIFY]
* Implement AppBar docking (defaults to floating because we don't properly support AppBars yet -- works in Windows). * Implement loading and saving the AppBar settings from the registry. * Remove the minimize button from the options dialog. CORE-10691 svn path=/trunk/; revision=70344
This commit is contained in:
parent
e30338c882
commit
2dbcc6fba0
23 changed files with 419 additions and 90 deletions
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 210, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 210, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Настройки на увеличителя"
|
CAPTION "Настройки на увеличителя"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Einstellungen"
|
CAPTION "Einstellungen"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Magnifier Settings"
|
CAPTION "Magnifier Settings"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -33,7 +33,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Configurar lupa"
|
CAPTION "Configurar lupa"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Paramètres de la loupe"
|
CAPTION "Paramètres de la loupe"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -31,7 +31,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "הגדרות זכוכית מגדלת"
|
CAPTION "הגדרות זכוכית מגדלת"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Impostazioni di Magnifier"
|
CAPTION "Impostazioni di Magnifier"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "拡大鏡の設定"
|
CAPTION "拡大鏡の設定"
|
||||||
FONT 9, "MS UI Gothic", 400, 0, 0x1
|
FONT 9, "MS UI Gothic", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Forstørrelse Innstilling"
|
CAPTION "Forstørrelse Innstilling"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -37,7 +37,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Ustawienia"
|
CAPTION "Ustawienia"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -31,7 +31,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Configurações da Lupa"
|
CAPTION "Configurações da Lupa"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -31,7 +31,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Configurare lupă"
|
CAPTION "Configurare lupă"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 185, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 185, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Параметры"
|
CAPTION "Параметры"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -34,7 +34,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Nastavenia Lupy"
|
CAPTION "Nastavenia Lupy"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -33,7 +33,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Konfigurimet e zmadhuesit"
|
CAPTION "Konfigurimet e zmadhuesit"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -29,7 +29,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Förstoringsglaset Inställning"
|
CAPTION "Förstoringsglaset Inställning"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -37,7 +37,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Seçenekler"
|
CAPTION "Seçenekler"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -37,7 +37,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Параметри екранної лупи"
|
CAPTION "Параметри екранної лупи"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -37,7 +37,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "放大镜设定"
|
CAPTION "放大镜设定"
|
||||||
FONT 9, "MS Shell Dlg", 400, 0, 0x1
|
FONT 9, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -37,7 +37,7 @@ BEGIN
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182
|
||||||
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "放大鏡設定"
|
CAPTION "放大鏡設定"
|
||||||
FONT 9, "MS Shell Dlg", 400, 0, 0x1
|
FONT 9, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
* David Quintana <gigaherz@gmail.com>
|
* David Quintana <gigaherz@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* TODO: AppBar */
|
/* TODO: Support AppBar types other than ABE_TOP */
|
||||||
|
|
||||||
#include "magnifier.h"
|
#include "magnifier.h"
|
||||||
|
|
||||||
#include <winbase.h>
|
#include <winbase.h>
|
||||||
|
@ -20,14 +21,16 @@
|
||||||
|
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
const TCHAR szWindowClass[] = TEXT("MAGNIFIER");
|
#define APPMSG_NOTIFYICON (WM_APP+1)
|
||||||
|
#define APPMSG_APPBAR (WM_APP+2)
|
||||||
|
|
||||||
#define MAX_LOADSTRING 100
|
const TCHAR szWindowClass[] = TEXT("MAGNIFIER");
|
||||||
|
|
||||||
/* Global Variables */
|
/* Global Variables */
|
||||||
HINSTANCE hInst;
|
HINSTANCE hInst;
|
||||||
HWND hMainWnd;
|
HWND hMainWnd;
|
||||||
|
|
||||||
|
#define MAX_LOADSTRING 100
|
||||||
TCHAR szTitle[MAX_LOADSTRING];
|
TCHAR szTitle[MAX_LOADSTRING];
|
||||||
|
|
||||||
#define TIMER_SPEED 1
|
#define TIMER_SPEED 1
|
||||||
|
@ -37,19 +40,19 @@ DWORD lastTicks = 0;
|
||||||
|
|
||||||
HWND hDesktopWindow = NULL;
|
HWND hDesktopWindow = NULL;
|
||||||
|
|
||||||
#define APPMSG_NOTIFYICON (WM_APP+1)
|
|
||||||
HICON notifyIcon;
|
|
||||||
NOTIFYICONDATA nid;
|
NOTIFYICONDATA nid;
|
||||||
|
HICON notifyIcon;
|
||||||
HMENU notifyMenu;
|
HMENU notifyMenu;
|
||||||
HWND hOptionsDialog;
|
HWND hOptionsDialog;
|
||||||
BOOL bOptionsDialog = FALSE;
|
BOOL bOptionsDialog = FALSE;
|
||||||
|
|
||||||
BOOL bRecreateOffscreenDC = TRUE;
|
BOOL bRecreateOffscreenDC = TRUE;
|
||||||
LONG sourceWidth = 0;
|
LONG sourceWidth = 0;
|
||||||
LONG sourceHeight = 0;
|
LONG sourceHeight = 0;
|
||||||
HDC hdcOffscreen = NULL;
|
HDC hdcOffscreen = NULL;
|
||||||
HANDLE hbmpOld;
|
|
||||||
HBITMAP hbmpOffscreen = NULL;
|
HBITMAP hbmpOffscreen = NULL;
|
||||||
|
HANDLE hbmpOld;
|
||||||
|
POINT ptDragOffset;
|
||||||
|
INT nearEdge;
|
||||||
|
|
||||||
/* Current magnified area */
|
/* Current magnified area */
|
||||||
POINT cp;
|
POINT cp;
|
||||||
|
@ -132,23 +135,158 @@ ATOM MyRegisterClass(HINSTANCE hInstance)
|
||||||
return RegisterClass(&wc);
|
return RegisterClass(&wc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DoAppBarStuff(DWORD mode)
|
||||||
|
{
|
||||||
|
UINT uState;
|
||||||
|
APPBARDATA data = {0};
|
||||||
|
data.cbSize = sizeof(data);
|
||||||
|
data.hWnd = hMainWnd;
|
||||||
|
data.uCallbackMessage = APPMSG_APPBAR;
|
||||||
|
|
||||||
|
if (mode == ABM_NEW || mode == ABM_SETPOS)
|
||||||
|
{
|
||||||
|
HWND hWndOrder = HWND_BOTTOM;
|
||||||
|
int rcw, rch;
|
||||||
|
RECT rcWorkArea;
|
||||||
|
SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
|
||||||
|
|
||||||
|
if(mode == ABM_NEW)
|
||||||
|
{
|
||||||
|
SHAppBarMessage(ABM_NEW, &data);
|
||||||
|
|
||||||
|
switch(AppBarConfig.uEdge)
|
||||||
|
{
|
||||||
|
case ABE_LEFT:
|
||||||
|
data.rc.top = rcWorkArea.top;
|
||||||
|
data.rc.bottom = rcWorkArea.bottom;
|
||||||
|
data.rc.left = rcWorkArea.left;
|
||||||
|
data.rc.right = data.rc.left + AppBarConfig.appBarSizes.left;
|
||||||
|
break;
|
||||||
|
case ABE_TOP:
|
||||||
|
data.rc.left = rcWorkArea.left;
|
||||||
|
data.rc.right = rcWorkArea.right;
|
||||||
|
data.rc.top = rcWorkArea.top;
|
||||||
|
data.rc.bottom = data.rc.top + AppBarConfig.appBarSizes.top;
|
||||||
|
break;
|
||||||
|
case ABE_RIGHT:
|
||||||
|
data.rc.top = rcWorkArea.top;
|
||||||
|
data.rc.bottom = rcWorkArea.bottom;
|
||||||
|
data.rc.right = rcWorkArea.left;
|
||||||
|
data.rc.left = data.rc.right - AppBarConfig.appBarSizes.right;
|
||||||
|
break;
|
||||||
|
case ABE_BOTTOM:
|
||||||
|
data.rc.left = rcWorkArea.left;
|
||||||
|
data.rc.right = rcWorkArea.right;
|
||||||
|
data.rc.bottom = rcWorkArea.bottom;
|
||||||
|
data.rc.top = data.rc.bottom - AppBarConfig.appBarSizes.bottom;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GetWindowRect(hMainWnd, &data.rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
data.uEdge = AppBarConfig.uEdge;
|
||||||
|
uState = SHAppBarMessage(ABM_QUERYPOS, &data);
|
||||||
|
|
||||||
|
uState = SHAppBarMessage(ABM_SETPOS, &data);
|
||||||
|
|
||||||
|
rcw = data.rc.right-data.rc.left;
|
||||||
|
rch = data.rc.bottom-data.rc.top;
|
||||||
|
|
||||||
|
uState = SHAppBarMessage(ABM_GETSTATE, &data);
|
||||||
|
if(uState & ABS_ALWAYSONTOP)
|
||||||
|
hWndOrder = HWND_TOPMOST;
|
||||||
|
|
||||||
|
SetWindowPos(hMainWnd, hWndOrder, data.rc.left, data.rc.top, rcw, rch, SWP_SHOWWINDOW|SWP_NOCOPYBITS);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(mode == ABM_GETSTATE)
|
||||||
|
{
|
||||||
|
HWND hWndOrder = HWND_BOTTOM;
|
||||||
|
uState = SHAppBarMessage(ABM_GETSTATE, &data);
|
||||||
|
if(uState & ABS_ALWAYSONTOP)
|
||||||
|
hWndOrder = HWND_TOPMOST;
|
||||||
|
SetWindowPos(hMainWnd, hWndOrder, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
|
||||||
|
}
|
||||||
|
else if(mode == ABM_ACTIVATE)
|
||||||
|
{
|
||||||
|
SHAppBarMessage(ABM_ACTIVATE, &data);
|
||||||
|
}
|
||||||
|
else if(mode == ABM_WINDOWPOSCHANGED)
|
||||||
|
{
|
||||||
|
SHAppBarMessage(ABM_WINDOWPOSCHANGED, &data);
|
||||||
|
}
|
||||||
|
else if(mode == ABM_REMOVE)
|
||||||
|
{
|
||||||
|
SHAppBarMessage(ABM_REMOVE, &data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AttachAppBar(INT uEdge)
|
||||||
|
{
|
||||||
|
if (AppBarConfig.uEdge == uEdge)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(AppBarConfig.uEdge < 0 && uEdge >= 0)
|
||||||
|
{
|
||||||
|
SetWindowLongPtr(hMainWnd, GWL_STYLE, GetWindowLongPtr(hMainWnd, GWL_STYLE) & (~WS_CAPTION));
|
||||||
|
}
|
||||||
|
else if(uEdge < 0 && AppBarConfig.uEdge>=0)
|
||||||
|
{
|
||||||
|
SetWindowLongPtr(hMainWnd, GWL_STYLE, GetWindowLongPtr(hMainWnd, GWL_STYLE) | WS_CAPTION);
|
||||||
|
SetWindowPos(hMainWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(AppBarConfig.uEdge >= 0)
|
||||||
|
{
|
||||||
|
DoAppBarStuff(ABM_REMOVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (uEdge >=0)
|
||||||
|
{
|
||||||
|
AppBarConfig.uEdge = uEdge;
|
||||||
|
DoAppBarStuff(ABM_NEW);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RECT rc = AppBarConfig.rcFloating;
|
||||||
|
SetWindowPos(hMainWnd, HWND_TOPMOST, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
AppBarConfig.uEdge = uEdge;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||||||
{
|
{
|
||||||
RECT rcWorkArea;
|
RECT rc;
|
||||||
|
DWORD exStyles = WS_EX_TOOLWINDOW | WS_EX_CONTROLPARENT;
|
||||||
|
DWORD dwStyles = WS_SIZEBOX | WS_SYSMENU | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_POPUP;
|
||||||
|
|
||||||
|
/* Load settings from registry */
|
||||||
|
LoadSettings();
|
||||||
|
|
||||||
|
rc = AppBarConfig.rcFloating;
|
||||||
|
|
||||||
hInst = hInstance; // Store instance handle in our global variable
|
hInst = hInstance; // Store instance handle in our global variable
|
||||||
|
|
||||||
SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
|
if (AppBarConfig.uEdge<0)
|
||||||
|
{
|
||||||
|
dwStyles |= WS_CAPTION;
|
||||||
|
exStyles |= WS_EX_TOPMOST;
|
||||||
|
}
|
||||||
|
|
||||||
/* Create the Window */
|
/* Create the Window */
|
||||||
hMainWnd = CreateWindowEx(
|
hMainWnd = CreateWindowEx(
|
||||||
WS_EX_TOPMOST | WS_EX_PALETTEWINDOW,
|
exStyles,
|
||||||
szWindowClass,
|
szWindowClass,
|
||||||
szTitle,
|
szTitle,
|
||||||
WS_OVERLAPPEDWINDOW,
|
dwStyles,
|
||||||
CW_USEDEFAULT,
|
rc.left,
|
||||||
CW_USEDEFAULT,
|
rc.top,
|
||||||
(rcWorkArea.right - rcWorkArea.left) * 2 / 3,
|
rc.right-rc.left,
|
||||||
200,
|
rc.bottom-rc.top,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
hInstance,
|
hInstance,
|
||||||
|
@ -157,12 +295,16 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||||||
if (!hMainWnd)
|
if (!hMainWnd)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
ShowWindow(hMainWnd, bStartMinimized ? SW_MINIMIZE : nCmdShow);
|
if (AppBarConfig.uEdge>=0) DoAppBarStuff(ABM_NEW);
|
||||||
UpdateWindow(hMainWnd);
|
else SetWindowPos(hMainWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
|
||||||
|
|
||||||
// Windows 2003's Magnifier always shows this dialog, and exits when the dialog isclosed.
|
// In Windows 2003's Magnifier, the "Start Minimized" setting
|
||||||
// Should we add a custom means to prevent opening it?
|
// refers exclusively to the options dialog, not the main window itself.
|
||||||
hOptionsDialog = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOGOPTIONS), hMainWnd, OptionsProc);
|
hOptionsDialog = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOGOPTIONS), hMainWnd, OptionsProc);
|
||||||
|
if (bStartMinimized)
|
||||||
|
ShowWindow(hOptionsDialog, SW_HIDE);
|
||||||
|
else
|
||||||
|
ShowWindow(hOptionsDialog, SW_SHOW);
|
||||||
|
|
||||||
if (bShowWarning)
|
if (bShowWarning)
|
||||||
DialogBox(hInstance, MAKEINTRESOURCE(IDD_WARNINGDIALOG), hMainWnd, WarningProc);
|
DialogBox(hInstance, MAKEINTRESOURCE(IDD_WARNINGDIALOG), hMainWnd, WarningProc);
|
||||||
|
@ -363,8 +505,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
//Get current mouse position
|
//Get current mouse position
|
||||||
GetCursorPos (&pNewMouse);
|
GetCursorPos (&pNewMouse);
|
||||||
|
|
||||||
|
#define PointsAreEqual(pt1, pt2) (((pt1).x == (pt2).x) && ((pt1).y == (pt2).y))
|
||||||
|
|
||||||
//If mouse has moved ...
|
//If mouse has moved ...
|
||||||
if (((pMouse.x != pNewMouse.x) || (pMouse.y != pNewMouse.y)))
|
if (!PointsAreEqual(pMouse, pNewMouse))
|
||||||
{
|
{
|
||||||
//Update to new position
|
//Update to new position
|
||||||
pMouse = pNewMouse;
|
pMouse = pNewMouse;
|
||||||
|
@ -373,13 +517,17 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bFollowCaret && guiInfo.hwndCaret)
|
if(guiInfo.hwndActive != hMainWnd)
|
||||||
|
{
|
||||||
|
if (bFollowCaret)
|
||||||
|
{
|
||||||
|
if (guiInfo.hwndCaret)
|
||||||
{
|
{
|
||||||
POINT ptCaret;
|
POINT ptCaret;
|
||||||
ptCaret.x = (guiInfo.rcCaret.left + guiInfo.rcCaret.right) / 2;
|
ptCaret.x = (guiInfo.rcCaret.left + guiInfo.rcCaret.right) / 2;
|
||||||
ptCaret.y = (guiInfo.rcCaret.top + guiInfo.rcCaret.bottom) / 2;
|
ptCaret.y = (guiInfo.rcCaret.top + guiInfo.rcCaret.bottom) / 2;
|
||||||
|
|
||||||
if (guiInfo.hwndCaret && ((pCaretWnd != guiInfo.hwndCaret) || (pCaret.x != ptCaret.x) || (pCaret.y != ptCaret.y)))
|
if ((pCaretWnd != guiInfo.hwndCaret) || !PointsAreEqual(pCaret, ptCaret))
|
||||||
{
|
{
|
||||||
//Update to new position
|
//Update to new position
|
||||||
pCaret = ptCaret;
|
pCaret = ptCaret;
|
||||||
|
@ -388,12 +536,19 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
ClientToScreen (guiInfo.hwndCaret, (LPPOINT) &ptCaret);
|
ClientToScreen (guiInfo.hwndCaret, (LPPOINT) &ptCaret);
|
||||||
cp = ptCaret;
|
cp = ptCaret;
|
||||||
}
|
|
||||||
hasMoved = TRUE;
|
hasMoved = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pCaretWnd = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (bFollowFocus && guiInfo.hwndFocus)
|
if (bFollowFocus)
|
||||||
|
{
|
||||||
|
if(guiInfo.hwndFocus && !guiInfo.hwndCaret)
|
||||||
{
|
{
|
||||||
POINT ptFocus;
|
POINT ptFocus;
|
||||||
RECT activeRect;
|
RECT activeRect;
|
||||||
|
@ -403,16 +558,24 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
ptFocus.x = (activeRect.left + activeRect.right) / 2;
|
ptFocus.x = (activeRect.left + activeRect.right) / 2;
|
||||||
ptFocus.y = (activeRect.top + activeRect.bottom) / 2;
|
ptFocus.y = (activeRect.top + activeRect.bottom) / 2;
|
||||||
|
|
||||||
if(guiInfo.hwndFocus && ((guiInfo.hwndFocus != pFocusWnd) || (pFocus.x != ptFocus.x) || (pFocus.y != ptFocus.y)))
|
if((guiInfo.hwndFocus != pFocusWnd) || !PointsAreEqual(pFocus, ptFocus))
|
||||||
{
|
{
|
||||||
//Update to new position
|
//Update to new position
|
||||||
pFocus = ptFocus;
|
pFocus = ptFocus;
|
||||||
pFocusWnd = guiInfo.hwndFocus;
|
pFocusWnd = guiInfo.hwndFocus;
|
||||||
if(!hasMoved)
|
if(!hasMoved)
|
||||||
|
{
|
||||||
cp = ptFocus;
|
cp = ptFocus;
|
||||||
hasMoved = TRUE;
|
hasMoved = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pFocusWnd = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!hasMoved)
|
if(!hasMoved)
|
||||||
{
|
{
|
||||||
|
@ -429,8 +592,9 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
lastTicks = GetTickCount();
|
lastTicks = GetTickCount();
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
{
|
{
|
||||||
|
@ -457,7 +621,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
default:
|
default:
|
||||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||||
}
|
}
|
||||||
break;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
|
@ -467,24 +631,117 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
dc = BeginPaint(hWnd, &PaintStruct);
|
dc = BeginPaint(hWnd, &PaintStruct);
|
||||||
Draw(dc);
|
Draw(dc);
|
||||||
EndPaint(hWnd, &PaintStruct);
|
EndPaint(hWnd, &PaintStruct);
|
||||||
break;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_CONTEXTMENU:
|
case WM_CONTEXTMENU:
|
||||||
TrackPopupMenu(notifyMenu, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, hWnd, NULL);
|
TrackPopupMenu(notifyMenu, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), 0, hWnd, NULL);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
{
|
||||||
|
RECT rc;
|
||||||
|
POINT pt;
|
||||||
|
SetCapture(hWnd);
|
||||||
|
|
||||||
|
GetCursorPos(&pt);
|
||||||
|
GetWindowRect(hWnd, &rc);
|
||||||
|
ptDragOffset.x = pt.x - rc.left;
|
||||||
|
ptDragOffset.y = pt.y - rc.top;
|
||||||
|
|
||||||
|
nearEdge = AppBarConfig.uEdge;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
if(GetCapture() == hWnd)
|
||||||
|
{
|
||||||
|
RECT rc;
|
||||||
|
POINT pt;
|
||||||
|
RECT rcWorkArea;
|
||||||
|
SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
|
||||||
|
GetCursorPos(&pt);
|
||||||
|
GetWindowRect(hWnd, &rc);
|
||||||
|
|
||||||
|
if(AppBarConfig.uEdge>=0)
|
||||||
|
{
|
||||||
|
if (pt.x >= rcWorkArea.left && pt.x <= rcWorkArea.right &&
|
||||||
|
pt.y >= rcWorkArea.top && pt.y <= rcWorkArea.bottom)
|
||||||
|
{
|
||||||
|
AttachAppBar(-2);
|
||||||
|
|
||||||
|
// Fixup offset
|
||||||
|
GetWindowRect(hWnd, &rc);
|
||||||
|
ptDragOffset.x = (rc.right-rc.left)/2;
|
||||||
|
ptDragOffset.y = 2;
|
||||||
|
|
||||||
|
rc.left = pt.x - ptDragOffset.x;
|
||||||
|
rc.top = pt.y - ptDragOffset.y;
|
||||||
|
|
||||||
|
SetWindowPos(hWnd, HWND_TOPMOST, rc.left, rc.top, 0, 0, SWP_NOSIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(pt.x <= rcWorkArea.left+8 && nearEdge != ABE_LEFT)
|
||||||
|
{
|
||||||
|
AttachAppBar(ABE_LEFT);
|
||||||
|
nearEdge = ABE_LEFT;
|
||||||
|
}
|
||||||
|
else if(pt.y <= rcWorkArea.top+8 && nearEdge != ABE_TOP)
|
||||||
|
{
|
||||||
|
AttachAppBar(ABE_TOP);
|
||||||
|
nearEdge = ABE_TOP;
|
||||||
|
}
|
||||||
|
else if(pt.x >= rcWorkArea.right-8 && nearEdge != ABE_RIGHT)
|
||||||
|
{
|
||||||
|
AttachAppBar(ABE_RIGHT);
|
||||||
|
nearEdge = ABE_RIGHT;
|
||||||
|
}
|
||||||
|
else if(pt.y >= rcWorkArea.bottom-8 && nearEdge != ABE_BOTTOM)
|
||||||
|
{
|
||||||
|
AttachAppBar(ABE_BOTTOM);
|
||||||
|
nearEdge = ABE_BOTTOM;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rc.left = pt.x - ptDragOffset.x;
|
||||||
|
rc.top = pt.y - ptDragOffset.y;
|
||||||
|
|
||||||
|
SetWindowPos(hWnd, HWND_TOPMOST, rc.left, rc.top, 0, 0, SWP_NOSIZE);
|
||||||
|
nearEdge = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pMouse = pt;
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_LBUTTONUP:
|
||||||
|
if(GetCapture() == hWnd)
|
||||||
|
{
|
||||||
|
if (AppBarConfig.uEdge>=0)
|
||||||
|
DoAppBarStuff(ABM_GETSTATE);
|
||||||
|
else
|
||||||
|
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
|
||||||
|
ReleaseCapture();
|
||||||
|
}
|
||||||
|
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
|
if(AppBarConfig.uEdge>=0) DoAppBarStuff(ABM_SETPOS);
|
||||||
|
/* fallthrough */
|
||||||
case WM_DISPLAYCHANGE:
|
case WM_DISPLAYCHANGE:
|
||||||
bRecreateOffscreenDC = TRUE;
|
bRecreateOffscreenDC = TRUE;
|
||||||
Refresh();
|
Refresh();
|
||||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
break;
|
||||||
|
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
// handle WM_ERASEBKGND by simply returning non-zero because we did all the drawing in WM_PAINT.
|
// handle WM_ERASEBKGND by simply returning non-zero because we did all the drawing in WM_PAINT.
|
||||||
break;
|
return 0;
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
|
if(AppBarConfig.uEdge>=0) DoAppBarStuff(ABM_REMOVE);
|
||||||
|
|
||||||
/* Save settings to registry */
|
/* Save settings to registry */
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
KillTimer(hWnd , 1);
|
KillTimer(hWnd , 1);
|
||||||
|
@ -501,15 +758,12 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
DestroyIcon(notifyIcon);
|
DestroyIcon(notifyIcon);
|
||||||
|
|
||||||
DestroyWindow(hOptionsDialog);
|
DestroyWindow(hOptionsDialog);
|
||||||
break;
|
return 0;
|
||||||
|
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
{
|
{
|
||||||
HMENU tempMenu;
|
HMENU tempMenu;
|
||||||
|
|
||||||
/* Load settings from registry */
|
|
||||||
LoadSettings();
|
|
||||||
|
|
||||||
/* Get the desktop window */
|
/* Get the desktop window */
|
||||||
hDesktopWindow = GetDesktopWindow();
|
hDesktopWindow = GetDesktopWindow();
|
||||||
|
|
||||||
|
@ -531,20 +785,57 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
notifyMenu = GetSubMenu(tempMenu, 0);
|
notifyMenu = GetSubMenu(tempMenu, 0);
|
||||||
RemoveMenu(tempMenu, 0, MF_BYPOSITION);
|
RemoveMenu(tempMenu, 0, MF_BYPOSITION);
|
||||||
DestroyMenu(tempMenu);
|
DestroyMenu(tempMenu);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case APPMSG_APPBAR:
|
||||||
|
{
|
||||||
|
switch (wParam)
|
||||||
|
{
|
||||||
|
case ABN_STATECHANGE:
|
||||||
|
DoAppBarStuff(ABM_GETSTATE);
|
||||||
break;
|
break;
|
||||||
|
case ABN_POSCHANGED:
|
||||||
|
DoAppBarStuff(ABM_SETPOS);
|
||||||
|
break;
|
||||||
|
case ABN_FULLSCREENAPP:
|
||||||
|
{
|
||||||
|
if(!lParam)
|
||||||
|
{
|
||||||
|
DoAppBarStuff(ABM_GETSTATE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetWindowPos(hMainWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ABN_WINDOWARRANGE:
|
||||||
|
if(lParam)
|
||||||
|
ShowWindow(hMainWnd, SW_HIDE);
|
||||||
|
else
|
||||||
|
ShowWindow(hMainWnd, SW_SHOW);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
case APPMSG_NOTIFYICON:
|
case APPMSG_NOTIFYICON:
|
||||||
HandleNotifyIconMessage(hWnd, wParam, lParam);
|
HandleNotifyIconMessage(hWnd, wParam, lParam);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_ACTIVATE:
|
||||||
|
if(AppBarConfig.uEdge>=0) DoAppBarStuff(ABM_ACTIVATE);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_WINDOWPOSCHANGED:
|
||||||
|
if(AppBarConfig.uEdge>=0) DoAppBarStuff(ABM_WINDOWPOSCHANGED);
|
||||||
|
Refresh();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_PTR CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
INT_PTR CALLBACK AboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
|
|
|
@ -26,6 +26,16 @@
|
||||||
|
|
||||||
extern int iZoom;
|
extern int iZoom;
|
||||||
|
|
||||||
|
struct _AppBarConfig_t {
|
||||||
|
DWORD cbSize;
|
||||||
|
INT uEdge;
|
||||||
|
DWORD value3;
|
||||||
|
DWORD value4;
|
||||||
|
RECT appBarSizes;
|
||||||
|
RECT rcFloating;
|
||||||
|
};
|
||||||
|
extern struct _AppBarConfig_t AppBarConfig;
|
||||||
|
|
||||||
extern BOOL bShowWarning;
|
extern BOOL bShowWarning;
|
||||||
|
|
||||||
extern BOOL bFollowMouse;
|
extern BOOL bFollowMouse;
|
||||||
|
|
|
@ -24,38 +24,64 @@ BOOL bInvertColors = FALSE;
|
||||||
BOOL bStartMinimized = FALSE;
|
BOOL bStartMinimized = FALSE;
|
||||||
BOOL bShowMagnifier = TRUE;
|
BOOL bShowMagnifier = TRUE;
|
||||||
|
|
||||||
|
struct _AppBarConfig_t AppBarConfig = {
|
||||||
|
sizeof(struct _AppBarConfig_t),
|
||||||
|
-2 /* ABE_TOP */,
|
||||||
|
0, 1, /* unknown */
|
||||||
|
{ 101,101,101,101 }, /* edge sizes */
|
||||||
|
{ 20, 20, 600, 200 }, /* floating window rect */
|
||||||
|
};
|
||||||
|
|
||||||
void LoadSettings()
|
void LoadSettings()
|
||||||
{
|
{
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
LONG value;
|
LONG value;
|
||||||
ULONG len;
|
ULONG len;
|
||||||
|
struct _AppBarConfig_t config_temp;
|
||||||
|
|
||||||
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Magnify"), 0, KEY_READ, &hkey) == ERROR_SUCCESS)
|
if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Magnify"), 0, KEY_READ, &hkey) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
|
len = sizeof(AppBarConfig);
|
||||||
|
if (RegQueryValueEx(hkey, _T("AppBar"), 0, 0, (BYTE *)&config_temp, &len) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
if(config_temp.cbSize == sizeof(AppBarConfig))
|
||||||
|
{
|
||||||
|
AppBarConfig = config_temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len = 4;
|
||||||
if (RegQueryValueEx(hkey, _T("StationaryMagLevel"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
if (RegQueryValueEx(hkey, _T("StationaryMagLevel"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
if (value >= 0 && value <= 9)
|
if (value >= 0 && value <= 9)
|
||||||
iZoom = value;
|
iZoom = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
len = 4;
|
||||||
if (RegQueryValueEx(hkey, _T("ShowWarning"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
if (RegQueryValueEx(hkey, _T("ShowWarning"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
||||||
bShowWarning = (value == 0 ? FALSE : TRUE);
|
bShowWarning = (value == 0 ? FALSE : TRUE);
|
||||||
|
|
||||||
|
len = 4;
|
||||||
if (RegQueryValueEx(hkey, _T("StationaryInvertColors"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
if (RegQueryValueEx(hkey, _T("StationaryInvertColors"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
||||||
bInvertColors = (value == 0 ? FALSE : TRUE);
|
bInvertColors = (value == 0 ? FALSE : TRUE);
|
||||||
|
|
||||||
|
len = 4;
|
||||||
if (RegQueryValueEx(hkey, _T("StationaryStartMinimized"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
if (RegQueryValueEx(hkey, _T("StationaryStartMinimized"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
||||||
bStartMinimized = (value == 0 ? FALSE : TRUE);
|
bStartMinimized = (value == 0 ? FALSE : TRUE);
|
||||||
|
|
||||||
|
len = 4;
|
||||||
if (RegQueryValueEx(hkey, _T("StationaryTrackCursor"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
if (RegQueryValueEx(hkey, _T("StationaryTrackCursor"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
||||||
bFollowMouse = (value == 0 ? FALSE : TRUE);
|
bFollowMouse = (value == 0 ? FALSE : TRUE);
|
||||||
|
|
||||||
|
len = 4;
|
||||||
if (RegQueryValueEx(hkey, _T("StationaryTrackFocus"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
if (RegQueryValueEx(hkey, _T("StationaryTrackFocus"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
||||||
bFollowFocus = (value == 0 ? FALSE : TRUE);
|
bFollowFocus = (value == 0 ? FALSE : TRUE);
|
||||||
|
|
||||||
|
len = 4;
|
||||||
if (RegQueryValueEx(hkey, _T("StationaryTrackSecondaryFocus"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
if (RegQueryValueEx(hkey, _T("StationaryTrackSecondaryFocus"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
||||||
bFollowFocus = (value == 0 ? FALSE : TRUE);
|
bFollowFocus = (value == 0 ? FALSE : TRUE);
|
||||||
|
|
||||||
|
len = 4;
|
||||||
if (RegQueryValueEx(hkey, _T("StationaryTrackText"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
if (RegQueryValueEx(hkey, _T("StationaryTrackText"), 0, 0, (BYTE *)&value, &len) == ERROR_SUCCESS)
|
||||||
bFollowCaret = (value == 0 ? FALSE : TRUE);
|
bFollowCaret = (value == 0 ? FALSE : TRUE);
|
||||||
|
|
||||||
|
@ -70,6 +96,8 @@ void SaveSettings()
|
||||||
|
|
||||||
if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Magnify"), 0, _T(""), 0, KEY_WRITE, NULL, &hkey, NULL) == ERROR_SUCCESS)
|
if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Magnify"), 0, _T(""), 0, KEY_WRITE, NULL, &hkey, NULL) == ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
|
RegSetValueEx(hkey, _T("AppBar"), 0, REG_BINARY, (BYTE *)&AppBarConfig, sizeof(AppBarConfig));
|
||||||
|
|
||||||
value = iZoom;
|
value = iZoom;
|
||||||
RegSetValueEx(hkey, _T("StationaryMagLevel"), 0, REG_DWORD, (BYTE *)&value, sizeof(value));
|
RegSetValueEx(hkey, _T("StationaryMagLevel"), 0, REG_DWORD, (BYTE *)&value, sizeof(value));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue