Win32 控件篇(2)

6.6 如何显示或隐藏控件

同样的还是IsWindowVisible和ShowWindow方法,之前使用过

void CDemoDlg::OnTest() 
{
    //获得控件窗口指针
    CWnd* pWnd = GetDlgItem(IDC_EDIT);

    //判断控件窗口是否可见
    if (pWnd->IsWindowVisible())    
    {
        //隐藏控件窗口
        pWnd->ShowWindow(SW_HIDE);

        SetDlgItemText(IDC_TEST, _T("显示控件"));
    }
    else
    {
        //显示控件窗口
        pWnd->ShowWindow(SW_SHOW);

        SetDlgItemText(IDC_TEST, _T("隐藏控件"));
    }
}

6.7 如何启用或禁用控件

同上相似,只不过方法成对的换成了IsWindowEnabled和EnableWindow

void CDemoDlg::OnTest() 
{
    //获得控件窗口指针
    CWnd* pWnd = GetDlgItem(IDC_EDIT);

    //判断控件窗口是否可用
    if (pWnd->IsWindowEnabled())    
    {
        //禁用控件窗口
        pWnd->EnableWindow(FALSE);

        SetDlgItemText(IDC_TEST, _T("启用控件"));
    }
    else
    {
        //启用控件窗口
        pWnd->EnableWindow(TRUE);

        SetDlgItemText(IDC_TEST, _T("禁用控件"));
    }
}

效果如下:

image

6.8 如何改变控件的颜色

写一个继承自CEdit的控件

CDemoEdit::CDemoEdit()
{
    //创建画刷
    m_hBrush = CreateSolidBrush(RGB(0x99, 0xCC, 0xFF));
}

CDemoEdit::~CDemoEdit()
{
}


BEGIN_MESSAGE_MAP(CDemoEdit, CEdit)
    //{{AFX_MSG_MAP(CDemoEdit)
    ON_WM_CTLCOLOR_REFLECT()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDemoEdit message handlers

HBRUSH CDemoEdit::CtlColor(CDC* pDC, UINT nCtlColor) 
{
    //设置文本前景色和背景色
    pDC->SetTextColor(RGB(0xFF, 0x00, 0x00));
    pDC->SetBkColor(RGB(0x99, 0xCC, 0xFF));

    return m_hBrush;
}

其次还要调用SubclassDlgItem方法

m_ctrlEdit.SubclassDlgItem(IDC_EDIT, this);

image

这个示例先不理,需要思考一下的.以后了解

6.9 如何设置控件的焦点

就是调用SetFocus方法

void CDemoDlg::OnTest() 
{
    //获得编辑框窗口
    CEdit* pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
    CEdit* pEdit2 = (CEdit*)GetDlgItem(IDC_EDIT2);
    
    //切换编辑框焦点
    if (m_nFocus == 0)
    {
        
        if (pEdit2->SetFocus())
        {
            m_nFocus = 1;
        }
    }
    else if (m_nFocus == 1)
    {
        if (pEdit1->SetFocus())
        {
            m_nFocus = 0;
        }
    }
}

6.10 如何为控件添加工具提示

声明一个CToolTipCtrl控件对象,然后如下调用顺序

//创建工具提示
m_ToolTip.Create(this);

//将工具提示与控件对应起来
 m_ToolTip.AddTool(GetDlgItem(IDC_EDIT), _T("编辑框"));

在PreTranslateMessage方法中调用RelayEvent方法

BOOL CDemoDlg::PreTranslateMessage(MSG* pMsg) 
{
    //将鼠标消息传递给工具提示
    m_ToolTip.RelayEvent(pMsg);

    return CDialog::PreTranslateMessage(pMsg);
}

先学会用就行

原文地址:https://www.cnblogs.com/Clingingboy/p/1989753.html