精华内容
下载资源
问答
  • WTL嵌入类的架构可以使整个程序很清晰,工具提示、上下文菜单处理可以分别独立出来,以下是实现代码,很清晰就不注释了。//ContextMenu.h#pragma once#include "stdafx.h" template class CContextMenu{public: ...

    WTL嵌入类的架构可以使整个程序很清晰,工具栏提示、上下文菜单处理可以分别独立出来,以下是实现代码,很清晰就不注释了。

    //ContextMenu.h
    #pragma once

    #include "stdafx.h"

     

    template <class T>

    class CContextMenu

    {

    public:

           BOOL CreatContextMenu(UINT ID_Menu)

           {

                  T* pT = static_cast<T*>(this);

                  CMenu menu;

                  menu.LoadMenu(ID_Menu);

                  CMenu SubMenu(menu.GetSubMenu(0));

                  POINT pos;

                  GetCursorPos(&pos);

                  SubMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pos.x, pos.y, pT->m_hWnd);

                  return TRUE;

           }

    };

    // IconMenu.h
    //需要添加一个菜单资源IDR_ICONMENU,包含ID_RESUME(恢复)、ID_QUIT(退出)

    #pragma once

     

    #include "stdafx.h"

    #include "ContextMenu.h"

     

    template <class T>

    class CIconMenu : public CContextMenu<T>

    {

    public:

           BEGIN_MSG_MAP(CContextMenu)

                  COMMAND_ID_HANDLER(ID_RESUME, OnResume)

                  COMMAND_ID_HANDLER(ID_QUIT, OnQuit)

           END_MSG_MAP()

     

           LRESULT OnResume(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)

           {

                  T* pT = static_cast<T*>(this);

                  pT->ShowWindow(SW_SHOW);

                  OpenIcon(pT->m_hWnd);

                  return 0;

           }

     

           LRESULT OnQuit(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)

           {

                  PostQuitMessage(0);

                  return 0;

           }

    };

    //ShellIcon.h

    #pragma once

    #include "stdafx.h"

    #include "IconMenu.h"

     

    template <class T>

    class CShellIcon : public CIconMenu<T>

    {

    private:

           NOTIFYICONDATA m_data;

           CString m_appName;

           UINT m_msgTaskbarRestart;

    public:

           CShellIcon()

           {

                  m_appName.LoadString(IDS_APPNAME);

                  m_msgTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));

           }

     

           ~CShellIcon()

           {

                  Shell_NotifyIcon(NIM_DELETE, &m_data);

           }

           BOOL CreateShellIcon()

           {

                  T* pT = static_cast<T*>(this);

                  SecureZeroMemory(&m_data, sizeof(m_data));

                  m_data.cbSize = sizeof(m_data);

                  m_data.hIcon = LoadIcon(_Module.get_m_hInst(), MAKEINTRESOURCE(IDR_MAINFRAME));

                  m_data.hWnd = pT->m_hWnd;

                  m_data.uID = IDR_MAINFRAME;

                  m_data.uFlags = NIF_ICON | NIF_MESSAGE | NIF_INFO | NIF_TIP;

                  m_data.uCallbackMessage = WM_ICON;

                  m_data.dwInfoFlags = NIIF_USER;

                  strcpy_s(m_data.szInfoTitle, m_appName);

                  strcpy_s(m_data.szTip, m_appName);

                  return Shell_NotifyIcon(NIM_ADD, &m_data);

           }

     

           void ModifyToolTips(LPCTSTR info)

           {

                  strcpy_s(m_data.szInfo, info);

           }

     

           BOOL DispalyToolTips()

           {

                  return Shell_NotifyIcon(NIM_MODIFY, &m_data);

           }

     

           BOOL BalloonToolTips(LPCTSTR info)

           {

                  ModifyToolTips(LPCTSTR info);

                  return DispalyToolTips();

           }

     

     

           BEGIN_MSG_MAP(CShellIcon)

                  MESSAGE_HANDLER(WM_ICON, OnIcon)

                  MESSAGE_HANDLER(m_msgTaskbarRestart, OnRestart)

                  CHAIN_MSG_MAP(CIconMenu<T>)

           END_MSG_MAP()

     

           LRESULT OnIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

           {

                  T* pT = static_cast<T*>(this); char t;

                  if (wParam != IDR_MAINFRAME) return 1;

                  switch(lParam)

                  {

                  case WM_RBUTTONUP:

                         t = *m_data.szInfo;

                         *m_data.szInfo = '/0';

                         Shell_NotifyIcon(NIM_MODIFY, &m_data);

                         pT->CreatContextMenu(IDR_ICONMENU);

                         *m_data.szInfo = t;

                         break;

                  case WM_LBUTTONUP:

                         pT->ShowWindow(SW_SHOW);

                         OpenIcon(pT->m_hWnd);

                         break;

                  case WM_MOUSEMOVE:

    //去掉下面的注释可以使鼠标悬停在图标上时出现气泡提示,个人不太喜欢

           //            DispalyToolTips(); break;

                  default:

                         ;

                  }

                  return 0;

           }

    //处理Explorer外壳崩溃后任务栏重建,你会发现很多程序都没处理,结果就是Explorer一崩溃

     

    //图标就找不到了,如果最小化到任务栏更惨,还得用任务管理器关闭,这个函数我没机会测试,希望有作用

     

           LRESULT OnRestart(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)

           {

                  T* pT = static_cast<T*>(this);

                  SecureZeroMemory(&m_data, sizeof(m_data));

                  m_data.cbSize = sizeof(m_data);

                  m_data.hWnd = pT->m_hWnd;

                  m_data.uID = IDR_MAINFRAME;

                  Shell_NotifyIcon(NIM_DELETE, &m_data);

                  CreateShellIcon();

                  return 0;

           }

    };

     

     因为使用任务栏提示几乎一定要用到上下文菜单(右键菜单),所以我把它们放到了一起,这几个类很好使用。

    CContextMenu的使用
    如果你的窗口需要上下文菜单,只需要从CContextMenu派生一个类,例如:

    template <class T>

    class CMyContextMenu : public CContextMenu<T>

    然后完成消息映射,例如CIconMenu所做的。在你的窗口类(假设为CMyWindowClass)的继承列表里面添加public CMyContextMenu<CMyWindowClass>,在消息映射表中添加CHAIN_MSG_MAP(CMyContextMenu<CMyWindowClass>)

    接下来只要在需要显示上下文菜单的地方,调用CreatContextMenu(UINT ID_Menu)就可以了。

    CShellIcon的使用
    把CShellICon加入窗口的继承列表,例如public CShellIcon<CMyWindowClass>,在消息映射表中添加CHAIN_MSG_MAP(CShellIcon<CMyWindowClass>),在OnCreat或者OnInitDialog里面的适当位置添加CreateShellIcon()。

     

    如果要最小化到任务栏,添加OnSize函数加入 if (IsIconic()) ShowWindow(SW_HIDE);

    在需要弹出气泡提示的时候调用BOOL BalloonToolTips(LPCTSTR info)

    展开全文
  • 上下文菜单与上下文操作模式

    千次阅读 2015-09-10 22:20:18
    长按ListView或GridView列表项删除某一条记录是一种上下文操作,即它是与...在Honeycomb以前版本的设备上,上下文操作是在浮动上下文菜单中呈现的。而在之后的版本设备上,上下文操作主要是通过上下文操作呈现的。

    长按ListView或GridView列表项删除某一条记录是一种上下文操作,即它是与某个特定屏幕视图(单个列表项)而非整个屏幕相关联的。

    在Honeycomb以前版本的设备上,上下文操作是在浮动上下文菜单中呈现的。而在之后的版本设备上,上下文操作主要是通过上下文操作栏呈现的。如下图:

    上下文操作栏

    浮动上下文菜单

    对于上下文操作,我们必须实现两组不同的回调方法,一组用于上下文操作栏,一组用于浮动上下文菜单。

    定义上下文菜单资源

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item
            android:id="@+id/menu_item_delete_crime"
            android:icon="@android:drawable/ic_delete"
            android:title="@string/delete_crime"/>
    
    </menu>

    实施浮动上下文菜单

    创建浮动上下文菜单

    @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            /**
             * 若定义了多个上下文菜单资源,通过检查传入onCreateContextMenu(...)方法的View视图ID,就可以自由决定
             * 使用那个资源来生成上下文菜单。
             */
            getActivity().getMenuInflater().inflate(R.menu.crime_list_item_context,
                    menu);
        }
    

    为浮动上下文菜单登记视图

    /**
             * ListFragment也有一个getListView()方法来获取ListFragment管理着的ListView。为什么不使用呢?
             * 这是因为,在onCreateView(...)方法完成调用并返回视图之前,getListView()方法返回的永远是null值。
             */
            ListView listView = (ListView) view.findViewById(android.R.id.list);
            // 为浮动上下文菜单登记视图,之后,长按视图则会触发上下文菜单的创建
            registerForContextMenu(listView);

    响应浮动上下文菜单选择事件

    @Override
        public boolean onContextItemSelected(MenuItem item) {
            // 因为ListView是AdapterView的子类,所以getMenuInfo()方法反悔了一个AdapterView.AdapterContextMenuInfo实例
            AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                    .getMenuInfo();
            int position = info.position;
            CrimeAdapter adapter = (CrimeAdapter) getListAdapter();
            Crime crime = adapter.getItem(position);
            switch (item.getItemId()) {
            case R.id.menu_item_delete_crime:
                CrimeLab.get(getActivity()).deleteCrime(crime);
                adapter.notifyDataSetChanged();
                return true;
            }
            return super.onContextItemSelected(item);
        }

    定义上下文操作模式

    创建上下文操作模式视图以及响应菜单选择事件

    /**
             * ListFragment也有一个getListView()方法来获取ListFragment管理着的ListView。为什么不使用呢?
             * 这是因为,在onCreateView(...)方法完成调用并返回视图之前,getListView()方法返回的永远是null值。
             */
            ListView listView = (ListView) view.findViewById(android.R.id.list);
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
                // 为浮动上下文菜单登记视图,之后,长按视图则会触发上下文菜单的创建
                registerForContextMenu(listView);
            } else {
                // 上下文操作模式下设置ListView的多选模式
                listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
                /**
                 * 为listView设置一个实现AbsListView.MultiChoiceModeListener接口的监听器。该接口包含以下回调方法,视图在选中或撤销时会触发它:
                 * public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked)
                 * 
                 * MultiChoiceModeListener实现了另一个接口,即ActionMode.CallBack。用户屏幕进入上下文操作时,会创建一个ActionMode类实例。
                 * 随后在其生命周期内,ActionMode.CallBack接口的回调方法会在不同时点被调用。以下为ActionMode.CallBack接口必须实现的四个方法:
                 */
                listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
    
                    /**
                     * 在onCreateActionMode(ActionMode mode, Menu menu)方法之后,以及当前上下文操作栏需要刷新显示新数据时调用。
                     */
                    @Override
                    public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
                        return false;
                    }
    
                    /**
                     * 在用户退出上下文操作模式或所选菜单项操作已被响应,从而导致ActionMode对象将要销毁时调用。默认的实现会导致已选视图被反选。
                     * 这里,也可完成在上下文操作模式下,响应菜单操作而引发的相迎fragment更新。
                     */
                    @Override
                    public void onDestroyActionMode(ActionMode arg0) {
                    }
    
                    /**
                     * 在ActionMode对象创建后调用。也是实例化上下文菜单资源,并显示在上下文操作栏上的任务完成的地方。
                     */
                    @Override
                    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                        /**
                         * 我们从操作模式,而非activity中获取MenuInflater的。操作模式负责对上下文操作栏进行配置。例如,
                         * 可调用ActionMode.setTitle(...)方法为上下文操作栏设置标题,而activity的MenuInflater则做不到这一点。
                         */
                        MenuInflater inflater = mode.getMenuInflater();
                        inflater.inflate(R.menu.crime_list_item_context, menu);
                        return true;//这里必须返回true,否则会导致操作模式创建失败。
                    }
    
                    /*
                     * 在用户选中某个菜单项操作时调用。是响应上下文菜单项操作的地方。
                     */
                    @Override
                    public boolean onActionItemClicked(ActionMode mode,
                            MenuItem item) {
                        switch (item.getItemId()) {
                        case R.id.menu_item_delete_crime:
                            CrimeAdapter adapter = (CrimeAdapter) getListAdapter();
                            CrimeLab crimeLab = CrimeLab.get(getActivity());
                            for (int i = adapter.getCount(); i >= 0; i--) {
                                if(getListView().isItemChecked(i)){
                                    crimeLab.deleteCrime(adapter.getItem(i));
                                }
                            }
                            mode.finish();
                            adapter.notifyDataSetChanged();
                            return true;
                        default:
                            return false;
                        }
                    }
    
                    @Override
                    public void onItemCheckedStateChanged(ActionMode mode,
                            int position, long id, boolean checked) {
                    }
                });
            }

    改变已激活视图的显示背景

    视图处于激活状态,是指该视图已被用户标记为关注处理对象。基于视图的状态,可使用state list drawable 资源来改变其显示背景。state list drawable是一种以XML定义的资源。该资源定义中,我们指定一个drawable(位图或彩图),并列出该drawable对应的状态。state list drawable一般定义在res/drawable目录下。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <!-- 当引用该drawable资源的视图处于激活状态时(即android:state_activated="true"),则使用android:drawable属性值指定的资源。 -->
        <item android:drawable="@android:color/darker_gray" 
              android:state_activated="true"/>
    
    </selector>

    实现其他视图的上下文操作模式

    如果视图即非ListView,也非GridView,要使用上下文操作模栏,该如何处理?

    首先,设置一个实现View.onLongclickListener接口的监听器。然后再监听器实现体内,调用Activity.startActionMode(…)方法创建一个ActionMode实例。startActionMode(…)方法需要实现一个ActionMode.Callback接口的对象作为参数。

    代码地址

    展开全文
  • 将code添加到上下文菜单If you find yourself frequently accessing the Windows Control Panel, why not put it where you can get to it the quickest? Right on the context menu. 如果您发现自己经常访问...
    将code添加到上下文菜单

    将code添加到上下文菜单

    acp_top

    If you find yourself frequently accessing the Windows Control Panel, why not put it where you can get to it the quickest? Right on the context menu.

    如果您发现自己经常访问Windows控制面板,为什么不把它放在可以最快地访问它的地方? 在上下文菜单上。

    Even with the new Settings interface taking over most of its duties, the old Control Panel is still a tool you’ll need to rely on pretty often. Sure, you can pin it to your taskbar—or even to your File Manager window—but having it right on your context menu means it’s always just a right-click away.

    即使新的“设置”界面承担了大部分职责, 旧的“控制面板”仍然是您经常需要依赖的工具。 当然,您可以将其固定在任务栏上,甚至可以固定在“文件管理器”窗口上,但是将其正确显示在上下文菜单上意味着始终只需单击鼠标右键即可。

    通过手动编辑注册表将控制面板添加到上下文菜单 (Add Control Panel to the Context Menu by Editing the Registry Manually)

    To add Control Panel to the context menu, you just need to make a couple of quick edits in the Windows Registry.

    要将“控制面板”添加到上下文菜单中,只需在Windows注册表中进行几个快速编辑。

    Standard warning: Registry Editor is a powerful tool and misusing it can render your system unstable or even inoperable. This is a pretty simple hack and as long as you stick to the instructions, you shouldn’t have any problems. That said, if you’ve never worked with it before, consider reading about how to use the Registry Editor before you get started. And definitely back up the Registry (and your computer!) before making changes.

    标准警告:注册表编辑器是一个功能强大的工具,滥用它会使您的系统不稳定甚至无法运行。 这是一个非常简单的技巧,只要您按照说明进行操作,就不会有任何问题。 也就是说,如果您以前从未使用过它,请在开始之前考虑阅读有关如何使用注册表编辑器的信息 。 并在进行更改之前一定要备份注册表 (和您的计算机 !)。

    Open the Registry Editor by hitting Start and typing “regedit.” Press Enter to open Registry Editor and give it permission to make changes to your PC.

    通过单击开始并键入“ regedit”来打开注册表编辑器。 按Enter键打开注册表编辑器,并授予其对PC进行更改的权限。

    own_1

    In the Registry Editor, use the left sidebar to navigate to the following key:

    在注册表编辑器中,使用左侧边栏导航至以下键:

    HKEY_CLASSES_ROOT\Directory\Background\shell
    
    acp_2

    Next, you’ll create a new key inside the shell key. Right-click the shell key and choose New > Key. Name the new key “Control Panel.” The name of this key is the name that will show up on the context menu.

    接下来,您将在shell键中创建一个新键。 右键单击shell密钥,然后选择“新建”>“密钥”。 将新键命名为“控制面板”。 此项的名称是将显示在上下文菜单中的名称。

    acp_3

    Next, you’ll another new key, this time inside the new Control Panel key. Right-click the Control Panel key and choose  New > Key. Name the new key “command.”

    接下来,您将使用另一个新键,这次是在新的“ Control Panel键中。 右键单击“控制面板”键,然后选择“新建”>“键”。 将新键命名为“命令”。

    acp_4

    With the new command key selected in the left pane, double-click the (Default) value in the right pane to open its properties window.

    在左窗格中选择新的command键后,双击右窗格中的(Default)值以打开其属性窗口。

    acp_5

    In the properties window, enter the following text into the “Value data” box:

    在属性窗口中,在“值数据”框中输入以下文本:

    rundll32.exe shell32.dll,Control_RunDLL
    
    acp_6

    The changes should take place immediately. To test it out, just right-click anywhere on your desktop or in File Explorer and see if you see the “Control Panel” command.

    更改应立即进行。 要对其进行测试,只需右键单击桌面或文件资源管理器中的任意位置,然后查看是否看到“控制面板”命令。

    acp_a

    If you want to reverse the changes at any time, just head back into the Registry and delete the Control Panel key you created. This will also delete the command key you created inside.

    如果您想随时撤消更改,只需回到注册表并删除您创建的Control Panel键即可。 这还将删除您在其中创建的command键。

    The real beauty of all this is that you can use the same basic procedure to add any program you want to your context menu. Just create a key named whatever you want inside the shell key, create a command key inside that new key, and then change the (Default) value of your new command key to the path for the program.

    所有这些的真正好处在于,您可以使用相同的基本过程将所需的任何程序添加到上下文菜单中。 只需在shell密钥中创建一个名为您想要的名称的密钥,在该新密钥中创建一个command密钥,然后将新命令密钥的(Default)值更改为程序的路径即可。

    下载我们的一键式注册表黑客 (Download Our One-Click Registry Hacks)

    acp_7

    If you don’t feel like diving into the Registry yourself, we’ve created a couple of registry hacks you can use. The “Add Control Panel to Context Menu” hack creates the keys you need to add the “Control Panel” command. The “Remove Control Panel from Context Menu (Default)” hack deletes those keys, removing the command and restoring the default. Both hacks are included in the following ZIP file. Double-click the one you want to use and click through the prompts.

    如果您不想自己进入注册表,我们已经创建了两个可以使用的注册表黑客。 “将控制面板添加到上下文菜单”黑客创建了添加“控制面板”命令所需的键。 “从上下文菜单中删除控制面板(默认)” hack会删除这些键,从而删除命令并恢复默认值。 这两种黑客都包含在以下ZIP文件中。 双击您要使用的一个,然后单击提示。

    Control Panel Context Menu Hacks

    控制面板上下文菜单黑客

    These hacks are really just the shell  key, stripped down to the new keys and values we talked about in the previous section and then exported to a .REG file. Running the hacks just creates or deletes the keys for adding the command to the context menu. And if you enjoy fiddling with the Registry, it’s worth taking the time to learn how to make your own Registry hacks.

    这些hack实际上只是shell密钥,被分解为我们在上一节中讨论的新密钥和值,然后导出到.REG文件。 运行hack只会创建或删除用于将命令添加到上下文菜单的键。 而且,如果您喜欢使用注册表,则值得花时间学习如何制作自己的注册表黑客

    翻译自: https://www.howtogeek.com/howto/windows-vista/add-control-panel-to-the-desktop-right-click-menu/

    将code添加到上下文菜单

    展开全文
  • 一个动作(action)就是一个可以添加到任意数量的菜单和工具栏上的项。在Qt中,创建菜单和工具栏包括以下这些步骤: 1.创建并且设置动作。 a.实例化QAction对象: newAction = new QAction(tr("&New"), this); b. ...

    Qt通过“动作”的概念简化了有关菜单和工具栏的编程。一个动作(action)就是一个可以添加到任意数量的菜单和工具栏上的项。在Qt中,创建菜单和工具栏包括以下这些步骤:

    1.创建并且设置动作。

    a.实例化QAction对象:

    newAction = new QAction(tr("&New"), this);

    b. 初始化对象:

    newAction->setIcon(":/images/icon.png");  //设置动作的图标,图标文件名如下文所示包含在*.qrc的文件中

     <!DOCTYPE RCC><RCC version="1.0">
    <qresource prefix="/">
     <file>images/icon.png</file>
     <file>images/smiley.png</file>
     <file>images/baifubao.png</file>
     <file>images/tudou.png</file>
     <file>images/icson.png</file>
    </qresource>
    </RCC>

     

    newAction->setShortcut(QKeySequence::New); //设置快捷键

    newAction->setStatusTip("New a file");  //设置光标在这个动作上时状态栏显示的信息

    connect(newAction, SIGNAL(triggered()), this, SLOT(newFile())); //设置动作的行为,newFile()为自定义的槽

     

    2.创建菜单并且把动作添加到菜单上。

    a.添加菜单到菜单栏:

    fileMenu = menuBar()->addMenu(tr("&File")); //添加File菜单到菜单栏

    b.添加设置好的动作到菜单:

    fileMenu->addAction(newAction)); //添加newAction动作到菜单中。

    c.添加子菜单到菜单中(可选):

    selectMenu = fileMenu->addMenu(tr("&Select")); //添加子菜单到菜单中

    selectMenu->addAction(selectNoneAction); //添加selectNoneAction菜单到子菜单selectMenu中

     

    3.添加工具栏

    fileToolBar = addToolBar(tr("&File"));  // 添加File工具栏

    fileToolBar->addAction(newAction); //添加新建动作到File工具栏

     

    exitToolBar = addToolBar(tr(&Exit)); //添加Exit工具栏

    exitToolBar->addAction(exitAction); //添加exitAction动作到Exit工具栏

     

    4.添加状态栏

     locationLabel = new QLabel("Hello World"); // 新建状态栏显示部件(QLabel)

    locationLabel->setAlignment(Qt::AlignHcenter); // 设置显示部件的显示方试

    locationLabel->setMinimumSize(locationLabel->sizeHint()); //设置显示部件合适的最小尺寸

    statusBar()->addWidget(locationLabel); //添加显示部件到状态栏

     

    5.添加上下文菜单

    this->addAction(newAction);  //添加动作,this指定父窗口部件

    this->addAction(exitAction);

     

    this->setContextMenuPolicy(Qt::ActionsContextMenu); //设置上下文菜单,只有设置上下文菜单后,上下文菜单才会显示

    展开全文
  • 请参考教材,全面理解和完成本章节内容... ... 我们将为应用实现长按列表项... 目前,上下文操作主要是通过上下文操作呈现的,它位于activity的Toolbar之上,上下文操作为用户提供了各种操作,如图18-1所示。 ...
  • 第一眼看上去ContextMenu很像MainMenu,说来可笑,我就这样“以为”了10分钟。实质就是右键弹出菜单,编辑好ContextMenu的内容后记住在...说明一下:icoNotify是右下脚任务栏图标控件,mnuNotify就是ContextM...
  • 最近Win10升级后遇到任务栏图标右键没有反应,多次尝试后原来是安装了startisback开始...经研究发现关闭startisback的替换任务栏上下文菜单后也可以解决,特此记录一下,希望也能帮到同样问题的朋友!???????????? ...
  • 一、优化分组XP任务栏 二、把WMP放在任务栏 三、自动隐藏桌面图标 ... 禁用“上下文菜单” 九. 指定“分组相似”窗口数量 十. 更改系统托盘 十一. 任务栏大“挪移” 十二. 时间显示“完全版”
  • QMainWindow上下文菜单内存泄露(QTBUG)

    千次阅读 热门讨论 2011-05-15 11:24:00
    起源 CSDN论坛有网友抱怨: 创建Qt工程,基于QMainwindow,什么也不做,程序会自带一个上下文菜单。 不断点击鼠标右键,菜单将反复出现,此时我用任务管理器查看其内存变化,发现每次不断增加,请问大家这是Qt的内存...
  • 上下文菜单 是操作系统中最有效且最常使用的功能之一。 通过简单的 右键 单击,用户可以访问大量可用的应用程序,功能和任务,所有这些都与发生该简单 右键 单击的窗口有关。 但是,即使有大量可用任务列表,用户...
  • 禁止用户修改删除“任务栏”和“开始”菜单 实验目的: 利用组策略,禁止用户随意修改删除任务栏和“开始”菜单 实验内容: ⑴打开组策略找到编辑任务栏和“开始”菜单项 ⑵阻止更改“任务栏和开始菜单...
  • 弹出使用ActionMode的上下文菜单,并让该ListView中的列表项支持复现,实现批量操作。 最后,就是当用户选择了一定数量的选项后,点击菜单中的Item进行某项批量操作后,执行对应的操作,并刷新ListView。 ...
  • If your Taskbar, System Tray, or Start menu acts up, you might be tempted to restart your PC. Instead, you can usually just restart Windows Explorer—and Windows ...如果“任务栏”,“系统任务栏”或“...
  • 终端服务实现了应用程序的集中部署,同时在低带宽情况下提供了快速的访问。...系列一 任务栏和[开始]菜单 在组策略的用户配置->管理模板->任务栏和开始菜单,将下列策略启用 设...
  • EverythingToolbar Windows任务栏的集成。... 通过任务栏上下文菜单启用EverythingToolbar 注意:您可能必须打开上下文菜单两次,因为它并不总是立即显示。 解锁任务栏后调整大小和位置 安装视频
  • swing里的菜单栏,官方提供了一系列API,这里我总结了一些简单用法。 先看效果图: ...菜单栏 ...JPopupMenu,弹出式菜单,右键点击某个控件,根据上下文弹出一个菜单 JPopupMenu:弹出菜单 JM...
  • Windows任务栏 ...Windows允许应用程序定义自定义上下文菜单,当用户右键单击任务栏中的应用程序图标时,将显示该菜单。该上下文菜单称为JumpList。您可以在TasksJumpList类别中指定自定义操作,如MSDN所...
  • WTL嵌入类的架构可以使整个程序很清晰,系统托盘气泡提示、上下文菜单处理可以分别独立出来,以下是实现代码,很清晰就不注释了。基本上这两个类很少需要修改,因此我把它们放到了系统包含文件搜索路径中。//...
  • 该模块通过右键单击上下文菜单实现Windows系统任务栏图标。 安装 要安装infi.systray,请运行: pip install infi.systray 或者,您可以使用easy_install。 用法 在上下文菜单中创建带有一个选项的图标: from ...
  • linux 自动隐藏任务栏Every bit of monitor space is precious, particularly vertical space. But in Windows 10, the fairly large taskbar takes up real estate even when you don’t need it. 显示器空间的每...
  • 文章目录前言解决方法一、解决开始菜单右键无反应问题二、解决打开管理及任务栏处图标报错附(无法编辑数据数值): 前言 前段时间查看网上教程去掉了桌面图标的小箭头 按照此方法的确可以去掉小箭头,但是却导致...
  • 取消任务栏快捷键翻转There’s no faster way to navigate your computer than withkeyboard shortcuts, and Windows continues toaddmore with each new version. Everything begins on the taskbar and Start menu...
  • Mylyn 2.0,集成任务和自动上下文管理  虽然软件系统、框架和工具可以无限制地发展,但开发人员实际处理信息的能力具有一个上限。大多数集成开发环境(IDE)尝试 使用结构化视图、编辑器和高级搜索功能...
  • 1、我注意到一些应用程序,当右键单击其任务栏最小化按钮时,在弹出的上下文菜单中具备特殊的命令。例如,WinAmp(一个流行的媒体播放器)有一个附加的 “WinAmp”菜单项,其中是 WinAmp 特有的命令。我如何在程序的...
  • 谁来结束GUI程序-关于任务栏的思考

    千次阅读 多人点赞 2019-07-07 22:18:16
    在之前使用Windows XP的时候,都会有这样的经历,即打开一大堆的窗口,在任务栏排的满满的,同样程序的不同程序还可以分组,看似很有条理的样子… 不光Windows,Linux桌面,MacOS竟然也 学 着Windows的样子,也这么...
  • 在QMainWidget基础实现菜单栏、工具、状态、右键菜单。 头文件: #ifndef GWDEMO_H #define GWDEMO_H #include &lt;QMainWindow&gt; #include &lt;QMenu&gt; #include &lt;QAction&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,804
精华内容 6,321
关键字:

任务栏上下文菜单