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

📄 floatwindow.c

📁 一个类似windows
💻 C
📖 第 1 页 / 共 2 页
字号:

}


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,
                    0,
                    (LPARAM)MAKELONG(10, 10));

        hImageList = InitImageList(NumButtons,
                                   IDB_HISTBACK);

        ImageList_Destroy((HIMAGELIST)SendMessage(hButtons,
                                                  TB_SETIMAGELIST,
                                                  0,
                                                  (LPARAM)hImageList));

        SendMessage(hButtons,
                    TB_SETBUTTONSIZE,
                    0,
                    MAKELONG(18, 16));

        SendMessage(hButtons,
                    TB_ADDBUTTONS,
                    NumButtons,
                    (LPARAM)HistoryButtons);

        return TRUE;
    }

    return FALSE;
}

LRESULT CALLBACK
FloatToolbarWndProc(HWND hwnd,
                    UINT Message,
                    WPARAM wParam,
                    LPARAM lParam)
{
    PFLT_WND FltInfo;

    /* Get the window context */
    FltInfo = (PFLT_WND)GetWindowLongPtr(hwnd,
                                         GWLP_USERDATA);
    if (FltInfo == NULL && Message != WM_CREATE)
    {
        goto HandleDefaultMessage;
    }

    switch(Message)
    {
        case WM_CREATE:

            FltInfo = (PFLT_WND)(((LPCREATESTRUCT)lParam)->lpCreateParams);

            /*FIXME: read this from registry */
            FltInfo->bShow = TRUE;

            FltInfo->bOpaque = FALSE;

            SetWindowLong(hwnd,
                          GWL_EXSTYLE,
                          GetWindowLong(hwnd,
                                        GWL_EXSTYLE) | WS_EX_LAYERED);

            /* set the tranclucency to 60% */
            SetLayeredWindowAttributes(hwnd,
                                       0,
                                       (255 * 60) / 100,
                                       LWA_ALPHA);

        break;

        case WM_TIMER:
        {
            POINT pt;

            if (FltInfo->bOpaque != TRUE)
            {
                KillTimer(hwnd,
                          ID_TIMER);
                break;
            }

            if (GetCursorPos(&pt))
            {
                RECT rect;

                if (GetWindowRect(hwnd,
                                  &rect))
                {
                    if (! PtInRect(&rect,
                                   pt))
                    {
                        KillTimer(hwnd,
                                  ID_TIMER);

                        FltInfo->bOpaque = FALSE;

                        SetWindowLong(hwnd,
                                      GWL_EXSTYLE,
                                      GetWindowLong(hwnd,
                                                    GWL_EXSTYLE) | WS_EX_LAYERED);

                        /* set the tranclucency to 60% */
                        SetLayeredWindowAttributes(hwnd,
                                                   0,
                                                   (255 * 60) / 100,
                                                   LWA_ALPHA);

                    }
                }
            }
        }
        break;

        case WM_NCMOUSEMOVE:
        case WM_MOUSEMOVE:
            if (FltInfo->bOpaque == FALSE)
            {
                SetWindowLong(hwnd,
                          GWL_EXSTYLE,
                          GetWindowLong(hwnd,
                                        GWL_EXSTYLE) & ~WS_EX_LAYERED);

                RedrawWindow(hwnd,
                             NULL,
                             NULL,
                             RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);

                FltInfo->bOpaque = TRUE;
                MessageBox(NULL, _T("in"), _T("Hit test"), MB_OK | MB_ICONEXCLAMATION);
                SetTimer(hwnd,
                         ID_TIMER,
                         200,
                         NULL);
            }
        break;

        case WM_CLOSE:
            ShowHideWindow(FltInfo);
        break;

        case WM_COMMAND:
            if (LOWORD(wParam) == IDCANCEL)
                ShowHideWindow(FltInfo);

            switch(LOWORD(wParam))
            {
                case ID_NEW:
                    MessageBox(hwnd, _T("Kapow!"), _T("Hit test"), MB_OK | MB_ICONEXCLAMATION);
                break;

                case ID_CLONESTAMP:
                case ID_COLORPICKER:
                case ID_ECLIPSE:
                case ID_ECLIPSESEL:
                case ID_ERASER:
                case ID_FREEFORM:
                case ID_LASOO:
                case ID_LINE:
                case ID_MAGICWAND:
                case ID_MOVE:
                case ID_MOVESEL:
                case ID_PAINTBRUSH:
                case ID_PAINTBUCKET:
                case ID_PENCIL:
                case ID_RECOLORING:
                case ID_RECTANGLE:
                case ID_ROUNDRECT:
                case ID_TEXT:
                case ID_ZOOM:
                    /*SendMessage(Info->hSelf,
                                LOWORD(wParam),
                                wParam,
                                lParam);*/
                break;
            }
        break;

        case WM_NCACTIVATE:
            /* FIXME: needs fully implementing */
            return DefWindowProc(hwnd,
                                 Message,
                                 TRUE,
                                 lParam);
        break;

        case WM_DESTROY:
            SetWindowLongPtr(hwnd,
                             GWLP_USERDATA,
                             0);
        break;

        default:
HandleDefaultMessage:
            return DefWindowProc(hwnd,
                                 Message,
                                 wParam,
                                 lParam);
    }

    return 0;
}


BOOL
InitFloatWndClass(VOID)
{
    WNDCLASSEX wc = {0};

    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = FloatToolbarWndProc;
    wc.hInstance = hInstance;
    wc.hIcon = NULL;
    wc.hCursor = LoadCursor(NULL,
                            IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
    wc.lpszClassName = szFloatWndClass;
    wc.hIconSm = NULL;

    return RegisterClassEx(&wc) != (ATOM)0;
}

VOID
UninitFloatWndImpl(VOID)
{
    UnregisterClass(szFloatWndClass,
                    hInstance);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -