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

    先学会用就行

  • 相关阅读:
    net下 Mysql Linq的使用, 更新数据,增加数据,删除数据
    mysql net连接读取结果为乱码 Incorrect string value
    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
    CBQW ---分组表单展示
    infopath 之绑定列表 数据源
    Office365 InfoPath 表单的设计和应用(原创)
    [转]如何管理一个远程团队
    [转]以《AI War》为例阐述AI元素概念与代码
    [转]分享AI寻径设计的射线追踪法
    [转]如何反推一个游戏
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1989753.html
Copyright © 2020-2023  润新知