MFC基于对话框的位图加载

       最近学VC++,遂写了简单的应用如文章标题,其实这个应用很常见。

         步骤1. 位图加载。通过位图的导入添加自己的位图,注意要是bmp格式。

         步骤2.创建一个Combo框,用于选择图片内容

         步骤3. 在onpaint()函数中将位图填充所选特定的区域

        

         当然这里只是实现基本功能:适合初学者。若有高手看有不正确的地方,请指正!

         程序代码:

1 .BOOL CLoadBitMapDlg::OnInitDialog()

  添加:

      // TODO: 在此添加额外的初始化代码
    
    // 添加背景选项
    ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(_T("汽车图片"));
    ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(_T("美女图片"));
    ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(_T("运动图片"));
    
    ((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(0);

2. void CLoadBitMapDlg::OnPaint()

 添加:

int index; // 索引号
        index = ((CComboBox*)GetDlgItem(IDC_COMBO1)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MFC 基于对话框程序中,实现鼠标移动到按钮时,按钮放大移位可以通过以下步骤和代码实现: 1. 在对话框的资源编辑器中添加一个自定义按钮控件,将按钮的 ID 设置为 IDC_MYBUTTON。 2. 在对话框类的头文件中添加以下变量: ```c++ CRect m_rectButton; // 记录按钮的位置和大小 BOOL m_bMouseOver; // 标记鼠标是否在按钮上 BOOL m_bLButtonDown; // 标记左键是否按下 CBitmap m_bmpButton; // 记录按钮的位图 ``` 3. 在 OnInitDialog() 函数中初始化以上变量: ```c++ // 获取按钮的位置和大小 GetDlgItem(IDC_MYBUTTON)->GetWindowRect(&m_rectButton); ScreenToClient(&m_rectButton); // 加载按钮的位图 m_bmpButton.LoadBitmap(IDB_BUTTON); ``` 4. 在 OnMouseMove() 函数中判断鼠标是否在按钮上,并更新按钮的状态: ```c++ void CMyDialog::OnMouseMove(UINT nFlags, CPoint point) { CDialogEx::OnMouseMove(nFlags, point); if (m_rectButton.PtInRect(point)) { // 鼠标在按钮上 if (!m_bMouseOver) { // 按钮状态改变 m_bMouseOver = TRUE; InvalidateRect(m_rectButton); } } else { // 鼠标不在按钮上 if (m_bMouseOver) { // 按钮状态改变 m_bMouseOver = FALSE; InvalidateRect(m_rectButton); } } } ``` 5. 在 OnLButtonDown() 和 OnLButtonUp() 函数中记录左键状态: ```c++ void CMyDialog::OnLButtonDown(UINT nFlags, CPoint point) { CDialogEx::OnLButtonDown(nFlags, point); if (m_rectButton.PtInRect(point)) { // 左键按下 m_bLButtonDown = TRUE; InvalidateRect(m_rectButton); } } void CMyDialog::OnLButtonUp(UINT nFlags, CPoint point) { CDialogEx::OnLButtonUp(nFlags, point); if (m_bLButtonDown) { // 左键弹起 m_bLButtonDown = FALSE; InvalidateRect(m_rectButton); } } ``` 6. 在 OnPaint() 函数中绘制按钮: ```c++ void CMyDialog::OnPaint() { CPaintDC dc(this); // 用于绘制的设备上下文 // 创建内存 DC CDC memDC; memDC.CreateCompatibleDC(&dc); // 创建位图 CBitmap* pOldBmp = memDC.SelectObject(&m_bmpButton); // 绘制按钮 if (m_bLButtonDown) { // 左键按下,绘制偏移后的按钮 memDC.BitBlt(1, 1, m_rectButton.Width(), m_rectButton.Height(), &dc, m_rectButton.left, m_rectButton.top, SRCCOPY); } else if (m_bMouseOver) { // 鼠标悬停,绘制放大后的按钮 memDC.StretchBlt(-1, -1, m_rectButton.Width() + 2, m_rectButton.Height() + 2, &dc, m_rectButton.left, m_rectButton.top, m_rectButton.Width(), m_rectButton.Height(), SRCCOPY); } else { // 正常状态,绘制原始按钮 dc.BitBlt(m_rectButton.left, m_rectButton.top, m_rectButton.Width(), m_rectButton.Height(), &memDC, 0, 0, SRCCOPY); } // 恢复位图和 DC memDC.SelectObject(pOldBmp); } ``` 注意:以上代码仅供参考,具体实现可能需要根据实际情况进行调整。变量的类型如上所示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值