精华内容
下载资源
问答
  • 在上一篇教程中,我们... 本文中的实例是在上一篇教程的基础上进行修改,在上一篇的基础上,增加一个菜单项用于使用记事本打开所选TXT文件,同时将我们在这两篇教程中添加的菜单项放到一个子菜单中。建议读者先完成

          在上一篇教程中,我们已经实现了在资源管理器的右键菜单中增加自己的菜单项。本文中,笔者将介绍如何将自己的菜单项分组到子菜单中。如果需要添加的菜单项比较多,则使用子菜单将有助于提高右键菜单的友好性。

          本文中的实例是在上一篇教程的基础上进行修改,在上一篇的基础上,增加一个菜单项用于使用记事本打开所选TXT文件,同时将我们在这两篇教程中添加的菜单项放到一个子菜单中。建议读者先完成上一篇教程。

    一. 错误的方法

          有过对菜单编程经验的读者可能很自然的想到,可以使用如下代码添加子菜单

    HRESULT CShlExtObj::QueryContextMenu (HMENU hmenu, 
                                          UINT uMenuIndex, 
                                          UINT uidFirstCmd,
                                          UINT uidLastCmd, 
                                          UINT uFlags )
    {
    	if (uFlags & CMF_DEFAULTONLY)
    		return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 0);
    	// 创建一个级联菜单
    	HMENU hSubMenu=CreatePopupMenu();
    	// 将菜单项添加到子菜单中
    	InsertMenu (hSubMenu, 
                    0, 
                    MF_BYPOSITION,
                    uidFirstCmd, 
                    _T("显示文件名称"));
    	InsertMenu (hSubMenu,
    		1,
    		MF_BYPOSITION,
    		uidFirstCmd+1,
    		_T("用记事本打开"));
    	// 将子菜单插入到右键菜单中
    	InsertMenu (hmenu, 
    		uMenuIndex, 
    		MF_BYPOSITION|MF_POPUP, 
    		(UINT_PTR)hSubMenu, 
    		_T("处理文本文件"));
    	return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 2 );
    }

          使用这种方法,你确实可以在右键菜单中添加一个子菜单,但是如果你在TXT文件上多次点击右键,然后在选中TXT文本文件时,点击资源管理器的“文件”菜单,你立刻就会发现问题:

    image

          “文件”菜单中,我们添加的子菜单重复了多次!这是这么回事儿?

          问题的原因是,Windows在释放右键菜单时,会删除由扩展DLL通过QueryContextMenu()方法添加的菜单项,我们知道,QueryContextMenu()的返回值会告诉调用者我们添加了多少个菜单项,Windows将通过此返回值计算需要删除的菜单项的ID。出现上述问题的原因在于,我们添加的子菜单没有ID!因此,这个子菜单无法删除。

    二. 正确的方法

          解决这个问题的诀窍在于,使用InsertMenuItem()添加我们的子菜单,该API函数可以给子菜单赋一个ID,这样,Windows就可以正常的删除我们添加的子菜单了。如下是正确的代码:

    HRESULT CShlExtObj::QueryContextMenu (HMENU hmenu, 
                                          UINT uMenuIndex, 
                                          UINT uidFirstCmd,
                                          UINT uidLastCmd, 
                                          UINT uFlags )
    {
    	if (uFlags & CMF_DEFAULTONLY)
    		return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 0);
    	// 创建一个级联菜单
    	HMENU hSubMenu=CreatePopupMenu();
    	// 将菜单项添加到子菜单中
    	InsertMenu (hSubMenu, 
                    0, 
                    MF_BYPOSITION,
                    uidFirstCmd, 
                    _T("显示文件名称"));
    	InsertMenu (hSubMenu,
    		1,
    		MF_BYPOSITION,
    		uidFirstCmd+1,
    		_T("用记事本打开"));
    	// 将子菜单插入到右键菜单中
    	MENUITEMINFO mii;
    	ZeroMemory(&mii, sizeof(mii));
    	mii.cbSize=sizeof(mii);
    	mii.fMask = MIIM_SUBMENU | MIIM_STRING | MIIM_ID;
    	mii.wID = uidFirstCmd+2;
    	mii.hSubMenu = hSubMenu;
    	mii.dwTypeData = _T("处理文本文件");
    	InsertMenuItem ( hmenu, uMenuIndex, TRUE, &mii );
    
    
    	return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 3 );
    }

           现在,QueryContextMenu()方法返回的菜单项个数是3,且子菜单也有自己的ID,这样,Windows就可以正确的删除我们添加的子菜单了。

    展开全文
  • 这篇文章的主旨是弄清楚如何根据实际需求实现一个联动菜单以及联动菜单的原理,实例是实现一个日期选择下拉菜单。本文调试环境为IE6/firefox1.5。首先来分析一下日期下拉菜单的需求。建议大家在写任何程序的时候都...
    这篇文章的主旨是弄清楚如何根据实际需求实现一个联动菜单以及联动菜单的原理,实例是实现一个日期选择下拉菜单。本文调试环境为IE6/firefox1.5。

    首先来分析一下日期下拉菜单的需求。建议大家在写任何程序的时候都应该在动手编程之前想清楚自己需要些什么,这样编程才有效率。

    年份: 一般来说有一个有效年份,比如说1900年至当前年份才是为效的,这个要根据实际需求来确定,如果是该下拉菜单是用来选择出生年月日还得把最大的年份减到一定的数目,如果有人的生日选择了2005年(即当前的年份),那是不正常的。

    月份:没有什么特殊需求,不管是哪一年都是有十二个月。

    天数:每个月的天数都可能是不定的,当然这可以根据一定的算法求出来,而它的根据就是当前选择的年份和月份。月份都有一个固定的天数,即一、三、五、七、八、十、十二月是三十一天,而四、六、九、十一月是三十天,二月份要根据当年是否为闰年判断是二十八天还是二十九天。求当月的天数我提出一个比较简单的算法,可以只根据当前的年份和月份就可以求出当月的天数,这会在后边讲一讲思路并将其实现。

    好了,现在我们来具体实现这个日期联动下拉菜单。

    联动下拉菜单是以两个或多个select元素为单位的,为了让这些菜单更多紧密的工作,我们可以实现一个类用来管理它们的初始化、事件,在这里就使用DateSelector为类名,它有三个属性,分别为年、月、日的下拉菜单,而这三个select元素是由构造函数的参数传进来的,另外为了更灵活地使用它,我们还可以再给DateSelector类的构造函数增加一个(Date对象)或三个参数(int数值),表示初始化的年月日。由于参数个数不定,我们可以不将另外增加的参数写入参数表里,而是在运行时判断arguments对象的length属性来执行不同的操作。arguments对象存储了当前函数的参数信息,可以查阅一下相关的资料比如说《Windows脚本技术》。

       提示:您可以先修改部分代码再运行

    接下来开始对联动菜单进行初始化,首先是年份,我们可以给类增加一个MinYear属性表示最小的年份,再增加一个MaxYear表示最大的年份,实现一个InitYearSelect方法初始化年份,实现一个InitMonthSelect方法初始化月份。由于这几个属性和方法的思路都是很简单,就不一一讲解,看看代码是怎么写的应该就能够明白,如果对类方面有不清楚有地方可以参考我发表在无忧脚本另一篇文章《由浅到深了解JavaScript类》。

       提示:您可以先修改部分代码再运行

    接下来要对天数进行初始化了,前边有说过天数是不定的,那要如何准确求出它的天数呢?我们稍加分析就知道每个月的最后一天就是该月的天数,相当于下一个月的第一天的前一天,比如说我们要求2005年11月的天数,那我们只需要得到2005年12月一日的前一天即可得到2005年11月最后一天。可以给DateSelector添加一个方法DaysInMonth来实现该功能。

       提示:您可以先修改部分代码再运行

    很明显,这种方法根本不需要考虑到该年份是否为闰年就可以轻松求出指定月的天数。另外,有些网友可能会对“var date = new Date(year, month, 0);”这句代码觉得奇怪,传入的是2005,2,0,这看起来似乎是求二月份第一天的前一天即一月份的最后一天,为什么还会得到二月份的天数?这里必须说明一天,JavaScript的Date对象里的月份是由0开始到11结束,也就是说0表示一月,2表示三月,所以就有这种错觉,在使用JavaScript的Date对象时要特别注意这一点。

    好了,天数的算法也解决了,那么我们可以轻松写出一个InitDaySelect方法来初始化天数了,在这个方法里要根据当前年份下拉菜单和月份下拉菜单的值算出该月的天数,由于天数是变动的,因此我们在该方法里也可事先清空天数下拉菜单的内容。

       提示:您可以先修改部分代码再运行

    现在已经写好几个方法用来初始化三个下拉菜单的选项了,我们需要做的是让它们结合并动起来。如果年份或月份有变动,那么应该重新计算天数并且重新初始化天数,这可以通过selYear和selMonth的onchange来实现。由于这三个下拉菜单是要紧密联动的,因此特地给它们增加一个属性Selector,值为当前的DateSelector实例。同时实现selYear和selMonth的onchange,如果发生onchange则调用InitDaySelect重新初始化selDay下拉菜单。

       提示:您可以先修改部分代码再运行

    到此为止我们已经基本实现DateSelector类要提供的功能了,为了更灵活地控制它,我们应该给它增加设定初始值的功能。一般来说有两种需求,第一种是传入一个Date对象,第二种是传入三个值分别表示年、月、日,也就是说我们必须重载构造函数,形式如下:

    function DateSelector(selYear, selMonth, selDay)
    function DateSelector(selYear, selMonth, selDay, date)
    function DateSelector(selYear, selMonth, selDay, year, month, day)

    当然,JavaScript没有重载的概念,但我们可以给它模拟出来,方法就是根据传入参数的个数(即arguments对象的length)以及类型来判断,这需要对原有的构造函数进行一定的改动使之更模块化地实现这三种情况。由于年份和月份是固定不变的,参数只会改变selYear和selMonth的已选选项,而selDay则要根据selYear和selMonth的值再动态生成,因此我们将初始化菜单代码再提出来写一个InitSelector方法里,它有三个参数,分别是year, month, day,功能是根据这三个参数来生成相应的菜单选项,我们这次调试使用2004年2月29日为初始值。要设置初始值的时候一般我们会循环访问option的值,但这里情况特殊,我们是可以根据一定的计算来得到默认选择的option的下标的。

    年份下标 = MaxYear - year
    月份下标 = month - 1
    天数下标 = day - 1

       提示:您可以先修改部分代码再运行

    好了,日期下拉菜单已经能够如我们想象的那样开始工作了,在调用的时候我们只需要执行new DateSelector(selYear, selMonth ,selDay, 2004, 2, 29);就可以,而且它内部关系紧密,你同一个页面可以同时运行好几组日期下拉菜单而互不影响,这也是我要采用类的形式而不是采用一组函数来实现的缘由了,我以后写的文章也会尽可能采用类的形式,这样写出来的代码使用起来会更加方便。像以往一样,我也得说88啦,希望大家能够继续支持无忧脚本的原创文章,并且踊跃参与到其中来。

     

    展开全文
  • 使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创建两个窗口(主窗口和菜单窗口),然后响应主窗口的鼠标右键点击事件,在主窗口右键点击事件的响应函数中获取鼠标位置,將菜单窗口的位置...

    本节向大家介绍一下右键弹出菜单是如何实现的。效果如下,在窗口中点击鼠标右键弹出菜单,点击菜单项能够响应菜单点击事件。
    这里写图片描述
    使用Duilib库实现的弹出菜单,实际上也是一个Windows窗口,因此我们需要创建两个窗口(主窗口和菜单窗口),然后响应主窗口的鼠标右键点击事件,在主窗口右键点击事件的响应函数中获取鼠标位置,將菜单窗口的位置调整为当前鼠标位置,同时把窗口设置为显示即可。

    菜单窗口的xml布局文件内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Window bktrans="true" size="120,102">
     <Font name="宋体" size="13" bold="false"/>
     <Font name="宋体" size="12"/>
    <VerticalLayout bkimage="file='menu_bk.png' corner='40,8,8,8'" hole="false">
        <List header="hidden" inset="8,8,8,8" itemhotimage="file='menu_hot_bk.png' corner='2,2,2,2'" itemdisabledbkcolor="#20000000">
            <ListContainerElement name="menu_Open" height="22" inset="40,0,0,0">
                <Label text="打开" mouse="false"/>
            </ListContainerElement>
            <ListContainerElement name="menu_Mark" height="22" inset="40,0,0,0">
                <Label text="标注" mouse="false"/>
            </ListContainerElement>
            <ListContainerElement name="menu_Delete" height="22" inset="40,0,0,0">
                <Label text="删除" mouse="false"/>
            </ListContainerElement>
            <ListContainerElement name="menu_Test" height="22" inset="40,0,0,0">
                <Label text="测试" mouse="false"/>
            </ListContainerElement>
        </List>
    </VerticalLayout>
    </Window>

    我们需要编写一个菜单窗口类继承WindowImplBase来加载xml界面。和上节不同的是我们把这个类的声明和成员函数的定义放在一个单独的头文件中,这样代码容易维护一些。新建头文件MenuWnd.h:

    #ifndef _MENUWND_H__
    #define _MENUWND_H__
    #include "win_impl_base.hpp"
    #include <Windows.h>
    class MenuWnd : public WindowImplBase
    {
        LPCTSTR GetWindowClassName() const
        {
            return L"MenuWnd";
        }
        UINT GetClassStyle() const{
            return UI_CLASSSTYLE_FRAME|CS_DBLCLKS;
        }
        tString GetSkinFile(){
            return L"tutorial6_menu.xml";
        }
        void Notify(TNotifyUI& msg)
        { 
            if(msg.sType == L"itemclick")
            {
                //响应菜单事件
                ::MessageBox(NULL,L"hello",L"hello",MB_OK);
                this->ShowWindow(false);
            } 
        } 
    
    };
    #endif

    接下来是主窗口,主窗口的xml界面布局文件内容和上节相同,仅仅是主窗口类的定义有些变化,我们同样把主窗口类的声明和定义放在一个单独的头文件MyWnd.h中:

    #ifndef _MYWND_H__
    #define _MYWND_H__
    #include "win_impl_base.hpp"
    #include "MenuWnd.h"
    #include <Windows.h>
    class MyWnd : public WindowImplBase
    {
    public: 
        MyWnd()
        {
            pMenu = new MenuWnd();
            pMenu->Create(m_hWnd,L"Menu",WS_POPUP,WS_EX_TOOLWINDOW);
            pMenu->ShowWindow(false);
        }
        LPCTSTR GetWindowClassName() const
        {
            return L"MyWnd";
        }
        UINT GetClassStyle() const{
            return UI_CLASSSTYLE_FRAME|CS_DBLCLKS;
        }
        tString GetSkinFile(){
            return L"tutorial6.xml";
        }
        void Notify(TNotifyUI& msg)
        {
            if(msg.sType == L"click")
            {
                if(msg.pSender->GetName() == L"CloseBtn")
                {
                    ::PostQuitMessage(0);
    
                }else if(msg.pSender->GetName() == L"MinBtn")
                {
                    ::SendMessage(m_hWnd,WM_SYSCOMMAND, SC_MINIMIZE, 0);
                }
            }
        } 
        LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
        {
            switch(uMsg)
            {
            case WM_RBUTTONDOWN:
                OnRButtonDown(wParam,lParam);
                return 0; 
            default:
                return WindowImplBase::HandleMessage(uMsg,wParam,lParam);
            }
        }
        void OnRButtonDown(WPARAM wParam, LPARAM lParam)
        { 
            int xPos = LOWORD(lParam); 
            int yPos = HIWORD(lParam);
            POINT pt = {xPos,yPos};
            ClientToScreen(m_hWnd,&pt); 
            pMenu->ShowWindow(true);
            ::SetWindowPos(pMenu->GetHWND(), NULL, pt.x, pt.y, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE); 
        } 
        LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
        {
            //获取鼠标点击位置
            int xPos = LOWORD(lParam); 
            int yPos = HIWORD(lParam);
            //將位置转换为屏幕坐标
            POINT pt = {xPos,yPos};
            ClientToScreen(m_hWnd,&pt); 
    
            RECT menuWndRect = {0};
            ::GetWindowRect(pMenu->GetHWND(),&menuWndRect);
    
            if(pt.x <= menuWndRect.left || pt.x >= menuWndRect.right 
                || pt.y <= menuWndRect.top || pt.y >= menuWndRect.bottom)
            {
                pMenu->ShowWindow(false);
            }
            bHandled = FALSE;
            return 0;
        }
    
    private:
        MenuWnd* pMenu;
    
    };
    #endif

    在主窗口类中定义一个MenuWnd指针类型的成员变量,在构造函数中创建菜单窗口设置显示风格为隐藏,重写父类的HandleMessage函数,响应主窗口鼠标右键点击事件,在右键点击事件的响应函数中重新设置菜单位置,并把窗口显示风格设置为显示。

    最后在WinMain函数中创建并显示主窗口:

    //tutorial6.cpp
    #include <Windows.h>
    #include "MyWnd.h" 
    INT WinMain(HINSTANCE hInst,HINSTANCE hPreInst,LPSTR lpCmdLine,INT Show)
    {
        CPaintManagerUI::SetInstance(hInst);
        CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetResourcePath());
        //创建主窗口
        MyWnd* pFrame = new MyWnd();
        pFrame->Create(NULL,L"Tutorial6",UI_WNDSTYLE_FRAME,WS_EX_WINDOWEDGE);
        pFrame->CenterWindow(); 
        pFrame->ShowWindow(true); 
        CPaintManagerUI::MessageLoop();
    
        return 0;
    }

    博文源码:https://github.com/rongbo-j/duilib-tutorial
    (参考tutorial6工程)

    展开全文
  • 首先,在资源管理器的菜单栏中添加一个菜单项 名称是网址收藏夹 属性设置为弹出菜单 其他为默认 然后在工具栏中添加一个按钮 名称设置为T ID为ID_ADDNETADDRES 意思是添加网址到收藏夹 工具栏中所添加的按钮...

    首先,在资源管理器的菜单栏中添加一个菜单项
    名称是网址收藏夹
    属性设置为弹出菜单
    其他为默认

    然后在工具栏中添加一个按钮
    名称设置为T
    ID为ID_ADDNETADDRES
    意思是添加网址到收藏夹

    工具栏中所添加的按钮可以将用户感兴趣的网址添加到网址收藏夹菜单下,
    当用户需要浏览这些网站时,
    打开网址收藏夹菜单选择相应网站即可浏览

    展开全文
  • 如何在托盘图标实现漂亮的菜单

    千次阅读 2005-03-23 13:16:00
    今日看到一个帖子问:如何在托盘图标实现象window开始菜单菜单左侧的图片效果。于是自己动手做了一个。 我的思路是不用菜单,用窗体来实现(我想不仅是delphi其他编程语言应该一样可以)。 例子中我用到了一个第...
  • 最近给公司整理资料,很多客户的扫描件都在电脑的D盘下的“客户资料”文件夹中,我做了一个简单的管理软件,里面其中有个菜单,点击之后能够直接打开“客户资料”这个文件夹,而不用从我的电脑--D盘-“客户资料”...
  • java中如何在eclipse里查看一个接口的所有实现类?  Eclipsejava编程语言 专业回答 JAVA时空 团队 ala400 2015-05-29 16:27 首先选中接口类型名字,右键菜单,如图   然后会出来...
  • 序:用js实现菜单命令虽然在技术上讲没什么,不过这算是比较全了。... 、【文件(F)】菜单中的命令的实现 1、〖打开〗命令的实现 [格式]:document.execCommand(“open”) [说明]这跟VB等编程设计中的webbrows
  • 对于如何实现每次按下后就显示字符串并在同一个窗口按另一个键时也能实时变化,我是采用KEY_DOWN输入空字符串KEY_UP输入按键对应名称的方法,所以需要额外做一个vk转char的函数,所幸MapVirtualKey同样具备这个功能...
  • 上次介绍了利用克隆体操作生成菜单按钮,今天讲一讲如何一个按钮具有动画的效果:当鼠标移到某个按钮上面时,显示动画效果 让菜单按钮有虚像效果 让菜单具有逐渐变大的效果 改变菜单按钮...
  • 我想仿造微信右上角的那个三点菜单,这时会出现一个下拉菜单,然后选择不同的menuitem,会跳转到不同的activity 像这样: 但是现在的问题就是我想在 public boolean onMenuItemClick(MenuItem arg0)
  • 菜单和工具条是所有Windows编程当中非常重要的一个技术,从本次讲座开始,我们给大家详细介绍在Visual Studio2005中,如何实现菜单和工具条。本次讲座所提供的例子也非常具有实用性。希望大家关注本次讲座。
  • 接下来让我们实现一个具有选择功能的菜单效果吧。效果可以参考下列的gif图: 点我查看GIF动图 思路: 1、 在脚本中监听下拉列表的选项改变,并获取选项值 2、 使用switch语句判断分支 3、将最终结果写入到页面中的...
  • 首先在CMainFrame类的头文件MainFrm.h 中定义一个弹出菜单的消息响应函数 代码如下 afx_msg void OnMenuClick(int nID); //定义响应函数 然后在消息映射里添加菜单命令消息宏ON_COMMAND_RANGE 代码如下 BEGIN...
  • 整体上是通过打印字符创建出,因此需要使用echo命令,但是有一些非打印字符,这些非打印字符很有用,如 空格键,换行符,对应的是\t,\n ,,想要打印出这些非打印字符,就必须使用echo -e 选项,最后一个是获取用户的...
  • 朱金灿 相信不少人进行数据库编程都有这样的问题,如何设置一个登陆框,通过登陆框来进入单...为此我几经探索,终于实现如何一个对话框弹出单文档视图。 下面我以一个登陆对话框为例来说明如何一个对话框...
  • 一个目标是添加菜单,这样就能加入about信息。有可能的话进一步做一个自定义操作键的设置框,还可以把联网相关操作也做进去。另外顺便把图标和光标一并弄了。   之前由于我的见识有限,以为菜单要学MFC才能弄。...
  • 菜单是Windows标准控件之菜单几乎在每应用软件中都存在。MS提供的默认菜单是比较难看的,但MS自己制作的程序比如Office等,用的菜单却很漂亮,而且一般不是默认的标准菜单(运用DrawMenuBar)。
  • 在用VS做MFC编程时,新建的工程中自带了文件视图/类视图/属性...1. 首先可以看一下这个右键菜单是在哪里响应的,打开FileView.cpp,里面有一个OnContextMenu响应事件,其代码如下: void CFileView::OnContextMe...
  • 下面我们通过一个简单的例子,先来完成一个最简单的图像处理-把图像黑白化。来说明RenderMonkey如何来处理数字图像。 Render Monkey和VC类似,内置了一些工程代码。在这里我们在RenderMonkey的工作区菜单里选择Add...
  • 在实际编程中我们经常会遇到下拉菜单的下三角和一些特殊的图形,那么这些如何用css来实现呢? 例1 例2 例3 原理思路 仔细想想,原理非常简单,利用CSS的border以及它的属性值transparent来实现三角形,其中最主要...
  • 不满意Jupyter Notebook只有...没问题,本文步步帮助你实现愿望。 疑问 在《 如何用Python做词云 》一文中,有眼尖的同学发现我在Jupyter Notebook新建笔记本时,菜单里有多选项。 这就意味...
  • 1、实验目的 明白如何进行头文件的引用和修改; 明白模块化编程的作用和...这主要后面学习按键菜单的时候使用。比如按次,调节时间的小时,按第二次,调节时间的分,再按次,调节时间的秒。 0—1---2–3--4—5-|
  • 如何用vb6建立带光栅的菜单2000-08-12 00:00作者:新天出处:yesky责任编辑:p> 编程爱好者一定对windows98中非常惹眼的“开始”菜单羡慕不已,但是微软公司似乎对它的这杰作存心垄断,它没有提供任何可供借用的...
  • C#.net_经典编程例子400

    热门讨论 2013-05-17 09:25:30
    第1章 窗体与界面设计 1 1.1 菜单应用实例 2 实例001 带历史信息的菜单 2 实例002 菜单动态合并 3 实例003 像开始菜单一样漂亮的菜单 4 实例004 任务栏托盘菜单 5 实例005 可以拉伸...
  • 在MFC编程中,我们经常遇到需要使用一个自己的对话框,那么怎么实现呢?下面我们就一起来看看: 1.打开ResourceView——>右键Dialog——>插入Dialog,给其取ID为IDD_DIALOG1 2.点击菜单栏上的插入——>类...
  • Delphi在系统默认的窗口菜单中添加自定义菜单项,在窗体标题栏的右键菜单中添加自定义菜单,这源码功能主要是演示这功能如何实现,超简单,面向Delphi的基础学者。 运行环境:Windows/Delphi7

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 564
精华内容 225
关键字:

如何编程实现一个菜单