⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 floatwindow.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -