📄 floatwindow.c
字号:
#include "precomp.h"
static const TCHAR szFloatWndClass[] = TEXT("ImageSoftFloatWndClass");
#define ID_TIMER1 1
#define ID_TIMER2 2
#define ID_TIMER3 3
TBBUTTON ToolsButtons[] = {
/* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */
{TBICON_RECTSEL, ID_RECTSEL, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* rectangle select */
{TBICON_MOVESEL, ID_MOVESEL, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* move selected pixels */
{TBICON_LASOO, ID_LASOO, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* lasso select */
{TBICON_MOVE, ID_MOVE, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* move selection */
{TBICON_ECLIPSESEL, ID_ECLIPSESEL, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* elipse select */
{TBICON_ZOOM, ID_ZOOM, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* zoom */
{TBICON_MAGICWAND, ID_MAGICWAND, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* magic wand */
{TBICON_TEXT, ID_TEXT, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* text */
{TBICON_PAINTBRUSH, ID_PAINTBRUSH, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* paintbrush */
{TBICON_ERASER, ID_ERASER, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* eraser */
{TBICON_PENCIL, ID_PENCIL, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* pencil */
{TBICON_COLORPICKER, ID_COLORPICKER, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* color picker */
{TBICON_CLONESTAMP, ID_CLONESTAMP, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* clone stamp */
{TBICON_RECOLORING, ID_RECOLORING, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* recolor */
{TBICON_PAINTBUCKET, ID_PAINTBUCKET, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* paint bucket */
{TBICON_LINE, ID_LINE, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* line */
{TBICON_RECTANGLE, ID_RECTANGLE, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* rectangle */
{TBICON_ROUNDRECT, ID_ROUNDRECT, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* round rectangle */
{TBICON_ECLIPSE, ID_ECLIPSE, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* elipse */
{TBICON_FREEFORM, ID_FREEFORM, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* free form */
{10, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
};
TBBUTTON HistoryButtons[] = {
{TBICON_BACKSM, ID_BACK, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* back */
{TBICON_UNDOSM, ID_UNDO, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* undo */
{TBICON_REDOSM, ID_REDO, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* redo */
{TBICON_FORWARDSM, ID_FORWARD, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* forward */
{TBICON_DELETESM, ID_DELETE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* delete */
};
BOOL
ShowHideWindow(HWND hwnd)
{
if (IsWindowVisible(hwnd))
return ShowWindow(hwnd, SW_HIDE);
else
return ShowWindow(hwnd, SW_SHOW);
}
BOOL
FloatToolbarCreateToolsGui(PMAIN_WND_INFO Info)
{
HWND hTb;
HIMAGELIST hImageList;
INT NumButtons;
NumButtons = sizeof(ToolsButtons) / sizeof(ToolsButtons[0]);
hTb = CreateWindowEx(0,
TOOLBARCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_WRAPABLE | CCS_NODIVIDER,
0, 0, 32, 200,
Info->fltTools->hSelf,
NULL,
hInstance,
NULL);
if (hTb != NULL)
{
SendMessage(hTb,
TB_SETEXTENDEDSTYLE,
0,
TBSTYLE_EX_HIDECLIPPEDBUTTONS);
SendMessage(hTb,
TB_BUTTONSTRUCTSIZE,
sizeof(ToolsButtons[0]),
0);
SendMessage(hTb,
TB_SETBITMAPSIZE,
0,
(LPARAM)MAKELONG(16, 16));
hImageList = InitImageList(NumButtons,
IDB_TOOLSRECTSEL);
ImageList_Destroy((HIMAGELIST)SendMessage(hTb,
TB_SETIMAGELIST,
0,
(LPARAM)hImageList));
SendMessage(hTb,
TB_ADDBUTTONS,
NumButtons,
(LPARAM)ToolsButtons);
SendMessage(hTb,
TB_AUTOSIZE,
0,
0);
return TRUE;
}
return FALSE;
}
VOID
FloatWindowPaintColorPicker(HWND hColorPicker)
{
HDC hdc;
RECT rect;
InvalidateRect(hColorPicker,
NULL,
TRUE);
UpdateWindow(hColorPicker);
hdc = GetDC(hColorPicker);
GetClientRect(hColorPicker,
&rect);
Ellipse(hdc,
rect.left,
rect.top,
rect.right,
rect.bottom);
ReleaseDC(hColorPicker,
hdc);
}
VOID
FloatWindowPaintHueSlider(HWND hHueSlider)
{
HDC hdc;
RECT rect;
InvalidateRect(hHueSlider,
NULL,
TRUE);
UpdateWindow(hHueSlider);
hdc = GetDC(hHueSlider);
GetClientRect(hHueSlider,
&rect);
Rectangle(hdc,
rect.left,
rect.top,
rect.right,
rect.bottom);
ReleaseDC(hHueSlider,
hdc);
}
BOOL
FloatToolbarCreateColorsGui(PMAIN_WND_INFO Info)
{
HWND hColorPicker;
HWND hHueSlider;
HWND hMouseButton;
HWND hMore;
RECT rect;
HBITMAP hMoreBitmap;
GetClientRect(Info->fltColors->hSelf,
&rect);
hColorPicker = CreateWindowEx(0,
WC_STATIC,
NULL,
WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
2,
2,
(int) (rect.right * 0.65),
rect.bottom - 2,
Info->fltColors->hSelf,
NULL,
hInstance,
NULL);
if (hColorPicker == NULL)
return FALSE;
hHueSlider = CreateWindowEx(0,
WC_STATIC,
NULL,
WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
145,
35,
25,
135,
Info->fltColors->hSelf,
NULL,
hInstance,
NULL);
if (hHueSlider == NULL)
return FALSE;
hMouseButton = CreateWindowEx(0,
WC_COMBOBOX,
NULL,
WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
118, 5, 75, 25,
Info->fltColors->hSelf,
NULL,
hInstance,
NULL);
if (hMouseButton == NULL)
return FALSE;
MakeFlatCombo(hMouseButton);
/* temp, just testing */
SendMessage(hMouseButton, CB_ADDSTRING, 0, (LPARAM)_T("Primary"));
SendMessage(hMouseButton, CB_ADDSTRING, 0, (LPARAM)_T("Secondary"));
SendMessage(hMouseButton, CB_SETCURSEL, 0, 0);
hMore = CreateWindowEx(WS_EX_STATICEDGE,
WC_BUTTON,
NULL,
WS_CHILD | WS_VISIBLE | BS_BITMAP,
rect.right - 15,
rect.bottom - 15,
15, 15,
Info->fltColors->hSelf,
NULL,
hInstance,
NULL);
if (hMore == NULL)
return FALSE;
hMoreBitmap = (HBITMAP)LoadImage(hInstance,
MAKEINTRESOURCE(IDB_COLORSMORE),
IMAGE_BITMAP,
12,
11,
LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS);
if (hMoreBitmap != NULL)
{
SendMessage(hMore,
BM_SETIMAGE,
IMAGE_BITMAP,
(LPARAM)hMoreBitmap);
}
/* temp functions for playing about with possible layouts */
FloatWindowPaintHueSlider(hHueSlider);
FloatWindowPaintColorPicker(hColorPicker);
if (hColorPicker != NULL)
{
HDC hDc = GetDC(hColorPicker);
TextOut(hDc, 8, 75, _T("Possible layout?"), 16);
ReleaseDC(hColorPicker, hDc);
}
return TRUE;
}
BOOL
FloatToolbarCreateHistoryGui(PMAIN_WND_INFO Info)
{
HWND hList;
HWND hButtons;
HIMAGELIST hImageList;
INT NumButtons;
hList = CreateWindowEx(0,
WC_LISTBOX,
NULL,
WS_CHILD | WS_VISIBLE | LBS_EXTENDEDSEL,
0, 0, 143, 100,
Info->fltHistory->hSelf,
NULL,
hInstance,
NULL);
if (hList == NULL)
return FALSE;
NumButtons = sizeof(HistoryButtons) / sizeof(HistoryButtons[0]);
hButtons = CreateWindowEx(0,
TOOLBARCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | CCS_BOTTOM | CCS_NODIVIDER,
0, 0, 0, 0,
Info->fltHistory->hSelf,
NULL,
hInstance,
NULL);
if (hButtons != NULL)
{
SendMessage(hButtons,
TB_BUTTONSTRUCTSIZE,
sizeof(ToolsButtons[0]),
0);
SendMessage(hButtons,
TB_SETBITMAPSIZE,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -