zoukankan      html  css  js  c++  java
  • 为基于对话框的应用程序添背景BitBlt()/双缓冲

    目标OS:WinCE

    IDE:VS 2005

    --------------------------------------------------------------------------------------------

    CDC  m_dcMem;

    CBitmap m_bmpMem;//可放到对话框头文件类定义中

    为对话框添加WM_PAINT消息

    void CETimeDlg::OnPaint()

    {

             CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here

    // Do not call CDialog::OnPaint() for painting messages

     m_dcMem.CreateCompatibleDC(&dc);//创建兼容DC

             CString filpath=L"";

             filpath+="//NAND//sk//GPS界面主菜单-1.BMP/0"; //图片路径

             m_bmpMem.m_hObject=SHLoadDIBitmap(filpath); //图片加载至m_bmpMem

               //或者图片作为资源 m_bmpMem.LoadBitmapW(IDB_BITMAP1);

            m_dcMem.SelectObject(&m_bmpMem);//位图选入兼容DC

            dc.BitBlt(0,0,800,480,&m_dcMem,0,0,SRCCOPY);//兼容DC的位图贴到当前DC

    }

    问题:1。不添加PAINT消息,将主要代码放到cpp文件的OnInitDialog()函数中,无法实现

       2。定义CWnd *m_pView;CDC *m_pDC;

        m_pView=GetDlgItem(IDD_ETIME_DIALOG);//IDD_ETIME_DIALOG为程序主对话框ID,获取对话框指针

        m_pDC=m_pView->GetDC();//获取对话框的DC指针

        //其他代码用m_pDC代替&dc

                   无论在PAINT函数中还是OnInitDialog()中都无法实现

    --------------------------------------------------------------------------------------------------------

    按照别人的方法做的双缓冲,感觉与只用一个DC没区别。。。。

    void CETimeDlg::OnPaint()

    {

    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here

    // Do not call CDialog::OnPaint() for painting messages

    CDC dcMem;

            CBitmap bmpMem,*oldbmpMem;

            dcMem.CreateCompatibleDC(&dc);

    bmpMem.CreateCompatibleBitmap(&dc,800,480);

    oldbmpMem=dcMem.SelectObject(&bmpMem);

    CDC dcMem2;

    CBitmap bmpMem2,*oldbmpMem2;

    CString filpath=L"";

    filpath+="//NAND//sk//GPS界面主菜单-1.BMP/0";

    bmpMem2.m_hObject=SHLoadDIBitmap(filpath);

    dcMem2.CreateCompatibleDC(&dcMem);

    oldbmpMem2=dcMem2.SelectObject(&bmpMem2);

    TransparentImage(dcMem.m_hDC,0,0,800,480,dcMem2.m_hDC,0,0,800,480,RGB(255,0,255));

    //难道是从兼容DC2复制图片到兼容DC1比较快,不闪屏?

    // dcMem2.SelectObject(oldbmpMem2);

    // bmpMem2.DeleteObject();

    // dcMem2.DeleteDC();

    dc.BitBlt(0,0,800,480,&dcMem,0,0,SRCCOPY);

    dcMem2.SelectObject(oldbmpMem2);

    bmpMem2.DeleteObject();

    dcMem2.DeleteDC();

    dcMem.SelectObject(oldbmpMem);

    bmpMem.DeleteObject();

    dcMem.DeleteDC();

    }

  • 相关阅读:
    POJ 2457 Part Acquisition
    POJ 1364 King ( 差分约束 )
    HDU 4292 Food (SAP | Dinic )
    1492: 费马定理 (快速幂)
    Csharp: 打印設置字符之間的間距
    sql script: Calculating Days
    Csharp: 阴历年甲子干支算法錯誤問題
    Csharp: 拼音转汉字字符搜索字符串
    SQL Server Dates or Calendar Table for PowerPivot
    Csharp:白底圖片透明處理
  • 原文地址:https://www.cnblogs.com/ezhong/p/2171498.html
Copyright © 2011-2022 走看看