天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 271|回复: 0

MFC中 用Static控件做超链接(可以实现变手形、下划线、字体变色等功能)

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-2-7 23:01:40 | 显示全部楼层 |阅读模式
    1、新建一个基于对话框的工程MyLink,在对话框中拖一个Static控件,ID可改为IDC采用SLink。

    2、在头文件中添加成员变量:

    private:
    CRect m采用Rect;
    CFont* m采用cfNtr;
    CFont m采用cfUL;
    LOGFONT m采用lfNtr, m采用lfUL;
    COLORREF m采用color;
    CBrush m采用brush;



    3、在.cpp文件中利用类向导添加初始化虚函数,并添加代码:


    BOOL CMyLinkDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();

        // 将“关于...”菜单项添加到系统菜单中。

        // IDM采用ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM采用ABOUTBOX & 0xFFF0) == IDM采用ABOUTBOX);
        ASSERT(IDM采用ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS采用ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF采用SEPARATOR);
                pSysMenu->AppendMenu(MF采用STRING, IDM采用ABOUTBOX, strAboutMenu);
            }
        }

        // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m采用hIcon, TRUE);            // 设置大图标
        SetIcon(m采用hIcon, FALSE);        // 设置小图标

        // TODO: 在此添加额外的初始化代码
        GetDlgItem(IDC采用SLink)->GetWindowRect(&m采用Rect);
        ScreenToClient (&m采用Rect);

        m采用cfNtr = this->GetFont();
        m采用cfNtr->GetLogFont ( &m采用lfNtr );
        m采用cfNtr->GetLogFont ( &m采用lfUL );
        m采用lfUL.lfUnderline = TRUE;
        m采用cfUL.CreateFontIndirect ( &m采用lfUL );

        m采用brush.CreateSysColorBrush ( COLOR采用MENU );
        m采用color = RGB (0,0,0);

        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }



    再利用类向导添加下面几个消息:


    void CMyLinkDlg::OnLButtonUp(UINT nFlags, CPoint point)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        CString strLink;
        UpdateData(TRUE);
        GetDlgItem(IDC采用SLink)->GetWindowText(strLink);
        if (point.x > m采用Rect.left && point.x < m采用Rect.right && point.y < m采用Rect.bottom && point.y > m采用Rect.top )
        {
            ShellExecute (NULL, NULL, strLink,NULL, NULL, SW采用NORMAL);
        }

        CDialog::OnLButtonUp(nFlags, point);
    }


    void CMyLinkDlg::OnMouseMove(UINT nFlags, CPoint point)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        if ( point.x > m采用Rect.left && point.x < m采用Rect.right && point.y < m采用Rect.bottom && point.y > m采用Rect.top )
        {
            HCURSOR hCursor;
            hCursor = :oadCursor ( NULL, IDC采用HAND );
            ::SetCursor ( hCursor );

            GetDlgItem(IDC采用SLink)->SetFont ( &m采用cfUL );

            m采用color = RGB (0,0,225);
            CStatic* m采用pStatic = (CStatic*)GetDlgItem(IDC采用SLink);
            m采用pStatic->RedrawWindow ();
        }
        else
        {
            GetDlgItem(IDC采用SLink)->SetFont ( m采用cfNtr );

            m采用color = RGB (0,0,0);
            CStatic* m采用pStatic = (CStatic*)GetDlgItem(IDC采用SLink);
            m采用pStatic->RedrawWindow();
        }

        CDialog::OnMouseMove(nFlags, point);
    }


    HBRUSH CMyLinkDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

        // TODO:  在此更改 DC 的任何属性
        if ( nCtlColor == CTLCOLOR采用STATIC )
        {
            pDC->SetBkMode ( TRANSPARENT );
            pDC->SetTextColor ( m采用color );

            return (HBRUSH)m采用brush.GetSafeHandle ();
        }

        // TODO:  如果默认的不是所需画笔,则返回另一个画笔
        return hbr;
    }

     

     

     

     

    MFC中 用Static控件做超链接(可以实现变手形、下划线、字体变色等功能)
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 11:38 , Processed in 0.131514 second(s), 29 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表