MFC控件

示例图片

1、把MFC类与控件关联起来
1)使用GetDlgItem函数
   CWnd* CWnd::GetDlgItem(int nID) const;
   void* CWnd::GetDlgItem(int nID,HWND* phWnd) const;

void CDialogDlg::OnGetdlgitem() 
{

    //获取某个空间的指针
    CComboBox
* pCbo=(CComboBox*)GetDlgItem(IDC_COMBO1);
    ASSERT(pCbo);
    
if(pCbo)
    {
        pCbo
->AddString("GetDlgItem-1");
        pCbo
->SetCurSel(0);
    }
}

2)通过Attach函数为控件定义子类
   使用此函数要注意在添加代码以去掉关联

void  CDialogDlg::OnUsingattach() 
{
    
if (NULL == m_combo2.GetSafeHwnd())
        
// 检查控件有没关联到子类
    {
        HWND hwnd;
        GetDlgItem(IDC_COMBO2,
& hwnd);
        
if (hwnd)
        {
            m_combo2.Attach(hwnd);
            m_combo2.AddString(
" Using Attach-1 " );
            m_combo2.AddString(
" Using Attach-2 " );
            m_combo2.SetCurSel(
0 );
        }
    }
}

void  CDialogDlg::OnDestroy() 
{
    CDialog::OnDestroy();

    m_combo2.Detach();
}

3)使用对话框模板控件的DDX
   添加完控件后,单击新添加的组合框,选择Add Member Variable菜单项。选中Member Variables,单击Add Variables,将Variable type设为CComboBox,在Variable name框中输入“m_combo3”

void  CDialogDlg::OnButton2() 
{
    m_combo3.AddString(
" Using DDX " );
    m_combo3.SetCurSel(
0 );
}

4)动态创建控件
   添加一个变量:CComBox m_combo4

void  CDialogDlg::OnButton3() 
{
    
if (NULL == m_combo4.GetSafeHwnd())
    {
        CComboBox
*  pExistingCombo = (CComboBox * )GetDlgItem(IDC_COMBO2);
        CWnd
*  pUsingDynamic = GetDlgItem(IDC_BUTTON3);
        ASSERT(pExistingCombo
&& pUsingDynamic);
        
if (pExistingCombo && pUsingDynamic)
        {
            CRect rectCombo,rectDropdown;
            pExistingCombo
-> GetWindowRect(rectCombo);
            ScreenToClient(rectCombo);

            CRect rectButton;
            pUsingDynamic
-> GetWindowRect(rectButton);
            ScreenToClient(rectButton);

            rectCombo.right
= rectButton.left + rectCombo.Width();
            rectCombo.left
= rectButton.left;

            pExistingCombo
-> ShowDropDown();
            pExistingCombo
-> GetDroppedControlRect(rectDropdown);
            
// 得到已存在组合框的下拉长度
            pExistingCombo -> ShowDropDown(FALSE);
            ScreenToClient(rectDropdown);
            rectCombo.bottom
+= rectDropdown.Height();

            DWORD dwStyle
= pExistingCombo -> GetStyle();
            m_combo4.Create(dwStyle,rectCombo,
this , 1222 );

            m_combo4.AddString(
" Dynamic-1 " );
            m_combo4.AddString(
" Dynamic-2 " );
            m_combo4.SetCurSel(
0 );
            m_combo4.SetFocus();
        }
    }
}

2、位图按钮
1)使用CBitmapButton类
   在项目中添加一个CBitmapButton类的子类(称为CMyFancyButton),并在按钮属性的样式中把Owner Draw属性设为TRUE。

BOOL CDialogDlg::OnInitDialog()
{
        
    m_fancyButton.LoadBitmaps(IDB_UP,IDB_DOWN,IDB_FOCUSED,IDB_DISABLED);
    
// 分别设置图像的四个状态
    m_fancyButton.SizeToContent(); // 自动将按钮的大小设置为位图的大小
         
}

2)使用BS_BITMAP风格
   在按钮属性的样式中把Bitmap属性设为TRUE。

BOOL CDialogDlg::OnInitDialog()
{

    CButton
*  pBSBitmap = (CButton * )GetDlgItem(IDC_BUTTON4);
    ASSERT(pBSBitmap);
    
if (pBSBitmap)
    {
        VERIFY(m_bmpBSBitmap.LoadBitmap(IDB_UP));
        HBITMAP hbmp
= (HBITMAP)m_bmpBSBitmap.GetSafeHandle();
        pBSBitmap
-> SetBitmap(hbmp);
    }

}

3、修改控件运行时的属性
1)改变控件的颜色
   添加WM_CTLCOLOR事件

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

    pDC
-> SetTextColor(RGB( 255 , 255 , 255 ));
    pDC
-> SetBkColor(RGB( 255 , 0 , 0 ));

    
return  hbr;
}

4)设置控件的字体
   首先声明字体CFont m_font,再定义字体,最后循环遍历控件并对其进行设置字体

int  CDialogDlg::PointSizeToHeight( int  iPointSize,HDC hDC)
{
    
int  iRetVal = 0 ;
    ASSERT(hDC
!= NULL);
    iRetVal
=- (MulDiv(iPointSize,::GetDeviceCaps(hDC,LOGPIXELSY), 72 ));
    
return  iRetVal;
}

BOOL CDialogDlg::OnInitDialog()
{

    LOGFONT lf;
    ZeroMemory(
& lf, sizeof (LOGFONT));
    CClientDC clientDC(
this );
    lf.lfHeight
= PointSizeToHeight( 18 ,clientDC.m_hDC);
    lf.lfWeight
= FW_BOLD;
    strcpy(lf.lfFaceName,
" MS Sans Serif " );
    VERIFY(m_font.CreateFontIndirect(
& lf));

}

void  CDialogDlg::OnButton6() 
{
    CWnd
*  pChildWnd = NULL;
    pChildWnd
= GetTopWindow();
    
while  (NULL != pChildWnd)
    {
        pChildWnd
-> SetFont( & m_font);
        pChildWnd
= pChildWnd -> GetNextWindow(GW_HWNDNEXT);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC(Microsoft Foundation Classes)是微软公司开发的一套用于Windows操作系统的C++类库,旨在简化Windows应用程序的开发过程。MFC提供了一系列的件(Controls)供开发者使用,帮助开发者快速构建各种Windows界面。下面将介绍几个常见的MFC件。 1.按钮件(Button Control):按钮件是最常见的件之一,它用于响应用户点击操作。开发者可以通过MFC提供的方法设置按钮的标签、大小、位置等属性,并注册相应的点击事件处理函数。在按钮被点击时,相应的函数将被调用,从而完成特定的逻辑操作。 2.编辑框件(Edit Control):编辑框件用于接收用户输入的文本。开发者可以通过MFC提供的方法设置编辑框的大小、位置等属性,并注册相应的输入事件处理函数。用户在编辑框中输入文本,相应的函数将被调用,开发者可以在函数中获得用户输入的内容,进一步进行处理。 3.列表框件(List Box Control):列表框件用于显示一系列的文本项,允许用户从中选择。开发者可以通过MFC提供的方法添加、删除、修改列表框中的文本项,并注册相应的选择事件处理函数。当用户选择列表框中的某个文本项时,相应的函数将被调用,开发者可以获取用户选择的内容,做出相应的响应。 除了上述几个件,MFC还提供了更多的件供开发者使用,包括单选框件、复选框件、进度条件等。开发者可以根据具体的应用需求选择适合的件,来构建丰富多样的用户界面。MFC件的使用可以大大简化Windows程序的开发过程,提高开发效率,并且可以通过其丰富的属性和事件来实现与用户的交互,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值