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); // 若不设置这个模式,图片会严重失真

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

  • 相关阅读:
    javascript实战演练,制作新按钮,‘新窗口打开网站’,点击打开新窗
    P1332 血色先锋队
    P4643 [国家集训队]阿狸和桃子的游戏
    T149876 公约数
    P1462 通往奥格瑞玛的道路
    P1083 借教室
    Tribles UVA
    Fence Repair POJ
    Crossing Rivers
    关于一轮
  • 原文地址:https://www.cnblogs.com/lingshaohu/p/2285920.html
Copyright © 2011-2022 走看看