网站如何添加浮动窗口(网站悬浮窗口怎么设置)

网站如何添加浮动窗口,网站悬浮窗口怎么设置内容导航:如何在网站首页中增加一个浮动窗口oppor9桌面悬浮窗怎么开启如何给浮动窗口添加按钮如何添加可链接的浮动窗口一、如何在网站首页中增加一个浮动窗口如题

网站如何添加浮动窗口,网站悬浮窗口怎么设置

内容导航:

  • 如何在网站首页中增加一个浮动窗口
  • oppor9桌面悬浮窗怎么开启
  • 如何给浮动窗口添加按钮
  • 如何添加可链接的浮动窗口
  • 一、如何在网站首页中增加一个浮动窗口

    如题,我想要在自己做的网站中添加1个浮动窗口。我的浮动窗口里面需要添加的是1个。而且我希望做出来的窗口是可以最小化和还原的,这样就在不需要用到的时候不会占用空间。

    二、oppor9桌面悬浮窗怎么开启

    这是桌面悬浮球功能。
    拖动加速球到桌面中间位置,再松开即可关闭后台运行程序。
    可通过以下方式打开或者关闭桌面加速球:1、ColorOS 3.0系统,设置–手机管家–桌面加速球;2、ColorOS 2.1系统,安全中心–设置–
    桌面加速球。
    部分机型没有加速球,可以通过点击屏幕左下角按键(长按home键)在任务管理界面,一键清理即可关闭正在运行的程序。
    具体操作步骤如下:1、点击手机桌面的手机管家进入–权限隐私。
    2、点击悬浮窗管理按钮,进入之后对相应的程序进行相关设置即可。
    在手机设置中选择手机管家

    三、如何给浮动窗口添加按钮

    新的MFC中添加了许多新的特性, 在VS2008上只需要安装SP1即可, VS2010则直接含有这部分的类.
    其中比较有用的一个就是CDockablePan类, 该类可以实现类似于VisualStudio中的悬浮窗口, 比如属性窗口, 输出窗口等.
    今天突然发现了一个问题, 就是在这种DockablePane中添加CButton对象时, 竟然这些按钮都是不可用的, 为此跟了许多的代码来搞定这个问题.
    当然了, 我的解决方法很土很恶心, 完全是治标不治本的, 应付一下需求而已…
    一. 先说原因
    1. 首先说下类的结构:
    继承关系是CDockablePane –> CBasePane –> CWnd
    2. 再说说原因
    (1). 在CBasePane中有一个函数OnIdleUpdateCmdUI, 其原型为:
    afx_msg LRESULT OnIdleUpdateCmdUI(WPARAM wParam, LPARAM);
    该函数用来在idle的时刻更新一些UI上的东西, 这里说的”空闲”是指没有需要处理的消息.
    (2). 该函数实际上是在内部调用了OnUpdateCmdUI()函数, 该函数是定义在CBasePane类中的虚函数, 原型为:
    virtual void OnUpdateCmdUI(CFrameWnd pTarget, BOOL bDisableIfNoHndler);
    该函数的参数第二个bool类型参数表示当前控件如果没有消息处理函数是否需要被禁用bDisableIfNoHndler, 在上面所说的这个过程中,
    该值为true, 也就是说: 如果一个button没有响应update_command_ui消息的handler, 那么该button会被禁用.
    (3). 该函数OnUpdateCmdUI()是在CDockablePane中被重写了的,
    其内部调用了CWnd类的CWnd::UpdateDialogControls(), 从名字上也可以看出, 该函数的作用是更新对话框中的控件
    (4). 该函数不是虚函数, 其函数定义在CWnd类中, 其函数原型为:
    void CWnd::UpdateDialogControls(CCmdTarget
    pTarget, BOOL bDisableIfNoHndler)
    在该函数内部, 截取其中几段代码为:
    // 1. 这段代码用来检查该控件自身是否含有响应update_command_ui的响应函数,
    而用的消息是WM_COMMAND+WM_REFLECT_BASE
    // check for reflect handlers in the child window
    CWnd pWnd = CWnd::FromHandlePermanent(hWndChild);
    if (pWnd != NULL)
    {
    // call it directly to disable any routing
    if (pWnd->CWnd::OnCmdMsg(0, MAKELONG(0xffff,
    WM_COMMAND+WM_REFLECT_BASE), &state;, NULL))
    continue;
    }
    在MFC中, 如果需要为控件设置该处理函数, 有三个宏可以设置该WM_COMMAND+WM_REFLECT_BASE消息的处理函数, 分别是:
    ON_CONTROL_REFLECT, ON_CONTROL_REFLECT_EX和ON_UPDATE_COMMAND_UI_REFLECT
    // 2. 如果该控件的父窗口也可以处理该update_command_ui消息, 那么也可以
    // check for handlers in the parent window
    if (CWnd::OnCmdMsg((UINT)state.m_nID, CN_UPDATE_COMMAND_UI, &state;, NULL))
    continue;
    但是如果万一没有人可以处理该消息, 那么, 就是
    // determine whether to disable when no handler exists
    BOOL bDisableTemp = bDisableIfNoHndler;
    if (bDisableTemp)
    {
    if ((ge(WM_GETDLGCODE) & DLGC_BUTTON) == 0)
    {
    // non-button controls don’t get automagically disabled
    bDisableTemp = FALSE;
    }
    else
    {
    // only certain button controls get automagically disabled
    UINT nStyle = (UINT)(() & 0x0F);
    if (nStyle == (UINT)BS_AUTOCHECKBOX ||
    nStyle == (UINT)BS_AUTO3STATE ||
    nStyle == (UINT)BS_GROUPBOX ||
    nStyle == (UINT)BS_AUTORADIOBUTTON)
    {
    bDisableTemp = FALSE;
    }
    }
    }
    也就是说, 如果是按钮, 那么就要被禁用, 其它好像也还有几种, 也是需要被禁用的.
    //3. 在这步以后, 要调用CCmdUI的DoUpdate()函数, 该函数原型为:
    BOOL DoUpdate(CCmdTarget
    pTarget, BOOL bDisableIfNoHndler);
    这个函数里面搞不清楚是怎么回事, 但其中调用了CCmdUI::Enable()函数, 在该函数中使得按钮被禁用了
    二. 接下来说解决办法
    1. 最粗鲁的方法就是直接改变原来的机制
    由于在CBasePane中含有OnUpdateCmdUI(CFrameWnd _pTarget, BOOL bDisableIfNoHndler)函数,
    其第二个参数意思就是: 如果该控件没有处理函数, 那么是否需要禁用. 默认值为true, 所以只需要重载该函数就差不多了.
    但是我们肯定要重载的是CDockablePane中的该函数, 因为在CBasePane中该函数什么也不做, 重载方法很简单,
    从CDockablePane中抄写一下就行了:
    void CDockablePane_1::OnUpdateCmdUI(class CFrameWnd _pTarget, int
    bDisableIfNoHndler)
    {
    //UpdateDialogControls(pTarget, bDisableIfNoHndler);
    UpdateDialogControls(pTarget, FALSE); //就是这儿了…
    CWnd _pFocus = GetFocus();
    BOOL bActiveOld = m_bActive;
    m_bActive = (pFocus->GetSafeHwnd() != NULL && (IsChild(pFocus) ||
    pFocus->GetSafeHwnd() == GetSafeHwnd()));
    if (m_bActive != bActiveOld)
    {
    SendMessage(WM_NCPAINT);
    }
    }
    但是这改变了所有控件的系统默认处理机制, 故不推荐啊!!!
    2. 让按钮自己来处理on_update_cmd消息
    由于按钮是没有对该消息做出处理才导致被禁用的(见原因分析), 所以我们可以自定义一个CMsgButton, 让类中含有该消息的处理部分就行了.如下:
    // 头文件
    class CMsgButton : public CButton
    {
    // 其它代码
    void OnUpdateUI(CCmdUI _cmdUI);
    };
    // cpp文件
    BEGIN_MESSAGE_MAP(CMsgButton, CButton)
    ON_UPDATE_COMMAND_UI_REFLECT(OnUpdateUI)
    END_MESSAGE_MAP()
    void CMsgButton::OnUpdateUI(CCmdUI _cmdUI) {} // 有该函数就行了
    3. 让父窗口处理
    按钮的on_update_cmd之类的消息, 也可以由其父窗口来响应(见原因分析), 以下的代码均在CDockablePane派生类中出现:
    ON_UPDATE_COMMAND_UI(1988, OnUpdateCommandUI) // 其中的1988是按钮的id, 需要让哪个按钮可用,
    这儿就应该出现这个id
    // 至少这个函数, 还是有就行, 不一定要有内容
    void COutputWnd::OnUpdateCommandUI(CCmdUI _cmdUI) {}
    4. 其它方法…
    // todo

    四、如何添加可链接的浮动窗口

    答:友情链接:控制面板-个人首页维护-自定义链接-友情链接-新增-(添加链接)-保存(操作栏)-保存

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/122374.html

    (0)
    robot
    上一篇 2022-05-13
    下一篇 2022-05-13

    相关推荐

    • 「写文章标题怎么写」文章标题应该怎么写

      写文章标题怎么写,文章标题应该怎么写 内容导航: 好的文章标题有什么特征怎么写 选题难写文章更难这个办法你一定要会 标题怎样写 我的博客为何不能写文章,但标题确可以写呢 一、好的文…

      2022-08-10
      0
    • goldwave怎么降调

      一些用goldwave的小伙伴们想要降调的时候不会了,其实很简单的我们只要我们开音频,选择时间效果在菜单栏的效果选项中选择时间然后一步步操作就可以啦。goldwave怎么降调1、我们开音频在菜单栏的效果选项中选择时间。2、然后点击软件上方菜单栏效果,找到音高点击打开音调调整界面。3、我们还可以通过软件上方的快捷工具栏中的音调调整按钮打开调整界面。

      2024-02-02
      0
    • sql中coalesce函数的功能有哪些

      在SQL中,COALESCE函数用于返回参数列表中的第一个非空表达式。其功能包括:返回参数列表中的第一个非空值。如果参数列表中的所有值都为空,则返回NULL。可以接受任意数量的参数。可以用作替代NVL函数,用于处理NULL值。总的来说,COALESCE函数主要用于处理NULL值,可以确保在处理数据时不会因为NULL值而出现错误。

      2024-02-27
      0
    • r语言怎么将数据框转化为列表

      要将数据框转化为列表,可以使用as.list()函数。以下是一个示例:# 创建一个数据框df <- data.frame(A = c(1, 2, 3),B = c("a", "b", "c"))# 将数据框转化为列表list_df <- as.list(df)print(list_df)这将把数据框df转化为一个列表list_df,其中每列都成为列表的一个元素。您可以通过索引访问列表中的元

      2024-03-28
      0
    • 网站如何进行备案(怎么进行网站备案)

      网站如何进行备案,怎么进行网站备案 内容导航: 如何进行网站备案申请 个人网站怎么备案 怎么查网站的备案是在那里备案的 如何对网站进行备案 一、如何进行网站备案申请 网站备案申请步…

      2022-08-02
      0
    • mysql和sqlite的区别有哪些

      数据库类型:MySQL是一种客户端/服务器数据库管理系统,而SQLite是一种嵌入式数据库管理系统。多用户支持:MySQL支持多个并发用户访问数据库,而SQLite通常用于单用户应用或小型团队合作。性能:MySQL通常比SQLite更适合处理大量数据和高并发请求,因为它是一个完整的数据库服务器,可以进行优化和调整。而SQLite在单用户、小规模应用中表现更好。功能:MySQL提供更多的高级功能和扩

      2024-03-21
      0