CSDNzengchihe
csdnzengchihe
采纳率78%
2018-02-11 09:26

MFC中鼠标点击在静态文本框1中改变原有颜色,并改变另一个静态文本框2中的颜色

5
已采纳

我在OnCtlColor中用createsolidbrush设置了静态文本框1和2的颜色,然后我想在鼠标点击静态文本框1时自身颜色变成静态文本框2的颜色,并将静态文本框2的颜色变成静态文本框
1的颜色(颜色互换)
鼠标点击事件应该怎么写
void CDialog11::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前

    图片说明

    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前
    BOOL CQ680148Dlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
    
        // Add "About..." menu item to system menu.
    
        // IDM_ABOUTBOX must be in the system command range.
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            CString strAboutMenu;
            strAboutMenu.LoadString(IDS_ABOUTBOX);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);         // Set big icon
        SetIcon(m_hIcon, FALSE);        // Set small icon
    
        // TODO: Add extra initialization here
        GetDlgItem(IDC_STATIC1)->GetWindowRect(&m_rect);  
        ScreenToClient(&m_rect);
        m_COLORREF = GetSysColor(COLOR_BTNFACE);
        return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    HBRUSH CQ680148Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
        // TODO: Change any attributes of the DC here
        if (pWnd->GetDlgCtrlID() == IDC_STATIC1 || pWnd->GetDlgCtrlID() == IDC_STATIC2)
        {
            pDC->SetBkColor(m_COLORREF);
        }
        // TODO: Return a different brush if the default is not desired
        return hbr;
    }
    
    点赞 评论 复制链接分享
  • dzxjw dzxjw 3年前

    先设置鼠标单击事件,设标志位记录状态0和1,点击按钮时切换状态,当状态为0时设为某种颜色,状态为1时为另一种颜色

    点赞 评论 复制链接分享
  • wodexinhao wodexinhao 3年前

    好像到处都是楼主的问题,而且都是这么简单的问题,看来楼主还是先打好基础把,基础太差了,要先努力打好基础了,多看看MFC的相关资料......二楼使用的工具好复古啊,现在都出到vs2017了,看来是有怀旧情节的一个人,哈哈,还有你这个功能的话,不需要用OnLButtonDown(UINT nFlags, CPoint point) 这个函数,CStatic控件本身有个鼠标左键点击函数afx_msg void OnLButtonDown(UINT nFlags, CPoint point);楼主还要用OnLButtonDown(UINT nFlags, CPoi监听整个窗口的左键点击,然后判断鼠标落点》不知道具体是想实现什么功能,为何要多此一举nt point)

    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前
     void CQ680148Dlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
        // TODO: Add your message handler code here and/or call default
        if (point.x > m_rect.left && point.x < m_rect.right && point.y <m_rect.bottom && point.y > m_rect.top)
        {
            m_COLORREF = RGB(255, 0, 0);
        }
        Invalidate();
        CDialog::OnLButtonDown(nFlags, point);
    }
    
    HBRUSH CQ680148Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
        // TODO: Change any attributes of the DC here
        if (pWnd->GetDlgCtrlID() == IDC_STATIC1 || pWnd->GetDlgCtrlID() == IDC_STATIC2)
        {
            pDC->SetTextColor(m_COLORREF);
        }
        // TODO: Return a different brush if the default is not desired
        return hbr;
    }
    
    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前

    图片说明

    点赞 评论 复制链接分享
  • oyljerry oyljerry 3年前

    可以在按钮点击中用一个变量flag保存切换状态,然后invalidate刷新按钮,然后按钮的OnCtlColor中根据flag,进行对应的颜色切换

    点赞 评论 复制链接分享