zoukankan      html  css  js  c++  java
  • mfc对话框设置背景位图,并防止位图失真

    在Dialog对应的类的 .h头文件 里面添加消息处理函数,用于改变Dialog的背景:

    afx_msg BOOL OnEraseBkgnd(CDC* pDC);


    然后在.cpp实现文件里面添加实现代码:

    BOOL CHGolfDlg::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: Add your message handler code here and/or call default
    //创建内存DC
    CDC MemDC;
    //CBitmap对象
    CBitmap Bitmap, *pOldBitmap;
    //BITMAP句柄
    BITMAP bmp;
    //加载位图
    Bitmap.LoadBitmap(IDB_MAINBG);
    //将位图资源与句柄绑定
    Bitmap.GetObject(sizeof(BITMAP), &bmp);
    int cx, cy;
    cx = GetSystemMetrics(SM_CXSCREEN);
    cy = GetSystemMetrics(SM_CYSCREEN);
    //创建与内存兼容的DC
    MemDC.CreateCompatibleDC(pDC);
    //替换原位图
    pOldBitmap = (CBitmap*)(MemDC.SelectObject(&Bitmap));
    pDC->SetStretchBltMode(COLORONCOLOR); // 若不设置这个模式,图片会严重失真
    pDC->StretchBlt(0, 0, cx, cy, &MemDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); // 拉伸图片使其全屏

    MemDC.SelectObject(pOldBitmap);
    MemDC.DeleteDC();
    return TRUE;
    }


     

    其中,IDB_MAINBG是背景位图。

    需要特别注意的是这行代码

    pDC->SetStretchBltMode(COLORONCOLOR); // 若不设置这个模式,图片会严重失真

    你可以试着把它注释掉,会发现事不如意,图片失真得厉害,简直被毁容了。

  • 相关阅读:
    Graphic
    GUI编程实战
    Swing 混合布局
    运算符与数据库函数
    mysq基础操作
    mysql常见问题处理
    static 与final abstract关键字
    JAVA面试
    Swing
    AWT的应用
  • 原文地址:https://www.cnblogs.com/lingshaohu/p/2285920.html
Copyright © 2011-2022 走看看