四年专业论文网,提供各种免费论文及范文报告下载及代写论文服务,包括硕士论文,毕业论文,职称论文,英语论文

加入收藏 | 网站地图 | 在线留言
华东论文网网站LOGO 代写论文论文定制 发表论文发表论文 合作流程合作流程 付款方式付款方式 信用说明信用说明 刊物介绍刊物介绍
本站公告: 热烈庆祝华东论文网新版上线 [华东论文网 2008年6月16日] 欢迎光临华东论文网-专业的代写论文网 [华东论文网 2007年10月21日] 欢迎广大网友来投稿! [华东论文网 2006年11月10日] 为您提供高质量的代写论文服务 [华东论文网 2007年10月20日] 代写论文 论文定制 发表论文 发表论文 诚邀合作 诚邀合作
您现在的位置: 华东论文网 >> 免费论文 >> 计算机类 >> 程序编程 >> 正文
热门文章
推荐文章
相关文章
  • 多种数制显示的汇编语言…

  • 基于SOAP的Web服务攻击及…

  • 深入CD-ROM编程

  • Solaris下PRO*C和OCI程序…

  • 基于JSP网页自动生成工具…

  • ASP技术访问WEB数据库

  • VB编程中网格控件的选用…

  • 网络时代对后结构主义的…

  • ASP.Net中程序构架与程序…

  • 如何提高Visual FoxPro的…

  • 论文网栏目 毕业论文选题指导 [注意]用VC++6.0为对话框添加最小化按钮和提示条 论文网栏目

    用VC++6.0为对话框添加最小化按钮和提示条

    作者:佚名 文章来源:本站原创 点击数: 更新时间:2005-3-3
       摘 要 本文通过实例介绍了用VC++6.0为对话框添加最小化按钮和提示条的方法和原理
    关键词 对话框 最小化按钮 提示条

    我们在使用对话框窗体时,会有这样一种感受:当对话框窗体位于其它程序窗口界面上时,单击对话框外区域时,可使对话框窗体最小化;而当对话框窗体位于桌面上时,无论怎样单击对话框外区域,对话框均不能最小化,只能选择关闭。但有时我们在使用对话框时,还希望能根据需要使对话框具有最小化功能。本文的设计思想就是据此提出来的。
    1 实例程序设计要点
    ⑴ 取得对话框标题栏位置和大小,在标题栏的适当位置绘制最小化按钮,并记住按钮的位置。
    ⑵ 在最小化按钮所在区域检测鼠标是否在该区域内、是否按下,是否发送最小化消息使对话框最小化,否则不变。
    ⑶ 将最小化按钮矩形区域向工具提示条控件注册,这样当鼠标在最小化按钮矩形区域时,显示提示文本。
    2 实例程序实现的步骤及说明
    ⑴ 准备二个位图,一个位图表示最小化按钮正常显示状态,另一个位图表示最小化按钮被按下时的状态。
    ⑵ 使用MFC AppWizard(exe)创建工程名为MinButton的对话框窗体,如图所示,将二个按钮位图导入对话框的资源里。

    ⑶ 在CMinButtonDlg对话框类中进行变量定义和函数声明。
    ⑷ 利用ClassWizard为对话框类添加消息WM_NCPAINT,WM_ACTIVATE和WM_NCMOUSEMOVE的消息处理函数,在这三个函数中调用成员函数DrawButton()来绘制按钮。
    ⑸ 利用ClassWizard为最小化按钮关联对应的消息WM_NCLBUTTONDOWN和消息处理函数OnNcLButtonDown(UINT nHitTest, CPoint point)。
    ⑹ 函数DrawButton()用于绘制按钮。由于最小化按钮并不是一个真实的按钮控件,而是一个画在标题栏上的位图。因此,为了在对话框窗体标题上绘画,必须创建一个窗口设备环境类(相当于创建一个画布,有了这个画布,才能在画布上绘画,也就是才能在标题栏上绘画。)
    ① 调用函数GetWindowDC()取得指向CDC的指针 CDC* pDC;
    ② 调用函数 CreateCompatibleDC(CDC* pDC)创建一个内存设备环境,以便在内存中保存位图,并与指定的窗口设备环境相兼容;
    ③ 调用函数SelectObject(CBitmap *pBitmap),将位图选入内存设备环境中;
    ④ 调用函数 BitBlt(int x, int y, int nWidth, int nHeight, CDC *pSrc, int xSrc, int ySrc, DWORD dwRop)将位图复制到实际设备环境中。其中,参数x, y 表示位图目标矩形左上角的x, y 逻辑坐标值;nWidth, nHeight 表示位图目标矩形的逻辑宽度和高度;pSrc 表示源设备环境CDC指针;xSrc, ySrc 表示位图源矩形的左上角的x, y 逻辑坐标值;dwRop 表示显示位图的光栅操作方式。光栅操作方式有多种,这里使用的是SRCCOPY,表示将位图直接复制到目标内存设备环境中。这里要说明一点:函数BitBlt()只能“一比一”的显示位图,如要任意缩放显示位图须使用函数StretchBlt(),该函数的使用方法,请参考相关书籍。
    ⑤ 位图选入内存环境中显示后,应调用函数SelectObject(CBitmap *pOldBitmap)恢复原来的内存设备环境。
    ⑺ 提示条实质上是一个小的弹出窗口,在窗口中显示一行文本,用来描述工具(或区域)的用途或其它信息。在MFC中提供了工具提示条控件类CToolTipCtrl,由它来管理提示条。在这里,我们从CToolTipCtrl类派生子类CToolTips。在子类的定义中添加函数BOOL AddToolTip( UINT nID, LPRECT lpRect, LPCTSTR lpszText),该函数用于向工具提示条控件注册按钮区域和提示文本,当鼠标在最小化按钮区域时,显示提示文本。
    3 主要的程序代码
    ⑴ 在对话框类中定义相应的变量和函数声明
    class CMinButtonDlg : public CDialog
    {
    …………
    public:
    CRect m_rtButtMin; //记录最小化按钮位置
    void DrawButton(); //绘制最小化按钮
    BOOL m_BMPPressed;//最小化按钮状态标志
    CRect m_ButtMinTips;//记录最小化按钮区域
    protected:
    CToolTips m_ToolTip;//定义工具提示条控件变量
    void GetMinButRect();//获取最小化按钮所在区域
    //消息处理函数
    afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
    afx_msg void OnNcPaint();
    afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
    afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
    …………
    };
    ⑵ 对话框类中三个消息处理函数定义如下:
    //对应消息WM_NCPAINT的消息处理函数
    void CMinButtonDlg::OnNcPaint()
    {
    CDialog::OnNcPaint();
    DrawButton(); //绘制最小化按钮
    }
    //对应消息WM_ACTIVATE的消息处理函数
    void CMinButtonDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
    {
    CDialog::OnActivate(nState, pWndOther, bMinimized);
    DrawButton(); //绘制最小化按钮
    }
    //对应消息WM_NCMOUSEMOVE的消息处理函数
    void CMinButtonDlg::OnNcMouseMove(UINT nHitTest, CPoint point)
    {
    DrawButton(); //绘制最小化按钮
    CDialog::OnNcMouseMove(nHitTest, point);
    }
    ⑶ 绘制最小化按钮的函数
    void CMinButtonDlg::DrawButton()
    {

    CDC* pDC = GetWindowDC();
    CDC* pMemDC=new CDC;
    CBitmap *pBitmap1=new CBitmap;
    CBitmap *pBitmap2=new CBitmap;
    CBitmap *pOldBitmap;
    CRect rtWnd, rtButtons, rtTitle;
    //创建一个内存设备环境
    pMemDC->CreateCompatibleDC(pDC);
    if(!pDC) return;
    GetWindowRect(&rtWnd);
    //取得标题栏的矩形
    rtTitle.left = GetSystemMetrics(SM_CXFRAME);
    rtTitle.top = GetSystemMetrics(SM_CYFRAME);
    rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);
    rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE);
    //计算最小化按钮的位置,位图大小为15X15
    rtButtons.top=rtTitle.top+1;
    rtButtons.bottom=rtButtons.top+15;
    rtButtons.right = rtTitle.right-20;
    rtButtons.left = rtButtons.right-15;

    m_rtButtMin = rtButtons;
    pBitmap1->LoadBitmap(IDB_BITMAP1); //调入正常状态按钮的位图
    pBitmap2->LoadBitmap(IDB_BITMAP2); //调入按钮按下状态的位图
    m_rtButtMin.OffsetRect(rtWnd.TopLeft());//记录最小化按钮的位置
    //将按钮位图调入内存设备环境中,m_BMPPressed为TRUE
    //调入正常状态按钮的位图
    pOldBitmap=pMemDC->SelectObject(m_BMPPressed ? pBitmap1: pBitmap2);
    //将按钮位图复制到实际的内存设备环境中
    pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(),
    rtButtons.Height(), pMemDC, 0, 0, SRCCOPY);
    pMemDC->SelectObject(pOldBitmap);//恢复原来的内存设备环境
    //释放资源
    ReleaseDC(pMemDC);
    ReleaseDC(pDC);
    delete pMemDC;
    delete pBitmap1;
    delete pBitmap2;
    }
    ⑷ 对应鼠标左键的WM_NCLBUTTONDOWN消息处理函数
    void CMinButtonDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
    {
    CDialog::OnNcLButtonDown(nHitTest, point);
    //检测是否在最小化按钮区域内按下按钮
    if (m_rtButtMin.PtInRect(point))
    {
    m_BMPPressed=FALSE;//绘制按钮按下时的状态
    DrawButton(); //绘制最小化按钮
    m_BMPPressed=TRUE;//绘制按钮的正常状态
    SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));//发送最小化消息
    }
    }
    ⑸ //在最小化按钮区域实现提示文本
    BOOL CToolTips::AddToolTip( UINT nID, LPRECT lpRect, LPCTSTR lpszText )
    {
    TOOLINFO Tips;
    memset(&Tips, 0, sizeof(TOOLINFO));
    Tips.cbSize = sizeof(TOOLINFO);
    Tips.hwnd = GetOwner()->GetSafeHwnd();
    Tips.uFlags = TTF_SUBCLASS;
    Tips.uId = nID;
    memcpy(&Tips.rect, lpRect, sizeof(RECT));
    Tips.lpszText = (LPSTR)lpszText;
    return (BOOL)SendMessage(TTM_ADDTOOL, 0, (LPARAM)&Tips);
    }
    ⑹ 在对话框初始化函数OnInitDialog()中添下列代码:
    m_ToolTip.Create(this,TTS_ALWAYSTIP);//创建工具提示控件,TTS_ALWAYSTIP表示,//不论控件所属窗体是否活动,提示条始终有效
    GetMinButRect();
    ScreenToClient(&m_ButtMinTips);//屏幕坐标转换为窗体坐标
    m_ToolTip.AddToolTip(1,&m_ButtMinTips,"最小化");
    4 结束语
    实例程序的测试环境为Windows 98、PⅡ350,效果良好。

    论文录入:华东论文网    责任编辑:华东论文网 
  • 上一篇论文: 用C语言实现按钮新技术

  • 下一篇论文: 基于SOAP的Web服务攻击及防范
  • 【字体: 】【发表评论】【告诉好友】【打印此文】【关闭窗口
    联系我们 | 版权申明 | 友情链接 | 关于论文网 | 网站地图 | 银行汇款说明 | 加盟笔杆子说明

    客服电话:13886096221(全天) QQ在线客服:论文代写在线QQ50403530 联系邮箱:hdlww@hdlww.com
    CopyRight (C)2004-2008 Www.hdlww.Com All Rights Reserved.. 浙ICP备05017412号
    所有论文资料均源于网上的共享资源及期刊共享,请特别注意勿做其他非法用途
    如有侵犯您的版权或其他有损您利益的行为,请联系指出,华东论文网会立即进行改正或删除有关内容
    本站关键词:

    论文网 硕士论文 毕业论文 职称论文 英语论文 代写论文