代码改变世界

Win32 控件篇(2)

  Clingingboy  阅读(1380)  评论(0编辑  收藏  举报

 

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);
}

先学会用就行

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示