zoukankan      html  css  js  c++  java
  • 2)添加画图的桌面背景

    1)当前这个窗口  大多都是 View的  只有那个工具条是 Frame的

    2)什么时候给这个窗口贴图,因为窗口在创建之后那个背景已经弄好了  那么就应该在窗口还没有创建时  就把窗口的背景准备好。

    3)一般把图片存在DC里面  比如 Frame的背景存在Frame的DC里面   那么整个桌面的背景应该在Window的DC里面,所以  我要拿到桌面的句柄

    4)在Frame的构造函数那块  程序运行到那里 窗口还没有创建   所以  此时 我们应该拿到桌面的句柄,然后拿到桌面的截图  然后贴到Frame要创建的窗口上 ,就算是完成了任务

    5)修改代码步骤

       1)首先在窗口没创建前,将桌面截图弄个下来

        

           

            思路是  :首先找到 桌面的DC (因为桌面DC装着整个桌面的背景图)

                 创建一个DC,这个DC是窗口的兼容DC,给这个兼容DC建一个位图,然后  把桌面那个DC中存的图片贴到这个DC上

                 那个这个DC的位图就有了内容,把这个位图给进栈,存下来

        2)在VIEW的OnDraw中贴图:

          

          

        注意添加 特定的头文件:
          

        给Frame文件添加相应的变量:
          

        注意 有了容器  得加头文件

          

      3)运行代码 结果:
        

          

        部分代码整理:

          

    1 //MainFrm.h中添加的代码:
    2 
    3     #include"stack"
    4 using namespace std;
    5 
    6 public:
    7     int Screen_width;
    8     int Screen_height;
    9     stack<CBitmap*> sk;
     1 //MainFrm.cpp中添加的代码:
     2 
     3 CMainFrame::CMainFrame()
     4 {
     5     // TODO: 在此添加成员初始化代码
     6     //我要获得桌面的长度和宽度  因为以后也用到  所以  我在类里面用两个变量记录
     7     Screen_width=GetSystemMetrics(SM_CXSCREEN);
     8     Screen_height=GetSystemMetrics(SM_CYSCREEN);
     9 
    10 
    11     //这里  贴桌面的背景图
    12     //①   获取桌面的句柄,这个句柄里面存着桌面的截图
    13     CWindowDC cWindow(GetDesktopWindow());
    14     //②     创建一个装桌面背景的DC
    15     CDC dc;
    16     dc.CreateCompatibleDC(&cWindow);
    17     CBitmap * BitMap=new CBitmap();
    18     BitMap->CreateCompatibleBitmap(&cWindow,Screen_width,Screen_height);
    19     dc.SelectObject(BitMap);
    20     //然后贴图
    21     dc.BitBlt(0,0,Screen_width,Screen_height,&cWindow,0,0,SRCCOPY);
    22 
    23     //将背景图存到栈里面,栈里面存的是位图的地址,也就是图片存在BitMap这个地址里了
    24     sk.push(BitMap);
    25     //然后把图片在那个OnDraw函数中 给当前窗口重绘就行了,下面就是去贴图
    26 
    27     
    28     
    29 }
    30 
    31 CMainFrame::~CMainFrame()
    32 {
    33     //在析构中,我们要把之前存的那个地址数组清空,同时将堆内存存的东西删除
    34     while(sk.empty()==false)
    35     {
    36         delete sk.top();//删除那个堆中存的文图占的内存
    37         sk.pop();
    38     }
    39 }
     1 //VIEW中添加的代码
     2 
     3 #include"MainFrm.h"
     4 
     5 void Cdraw_01View::OnDraw(CDC* /*pDC*/)
     6 {
     7     Cdraw_01Doc* pDoc = GetDocument();
     8     ASSERT_VALID(pDoc);
     9     if (!pDoc)
    10         return;
    11 
    12     // TODO: 在此处为本机数据添加绘制代码
    13     //这里就是将栈顶的图贴到这个VIEW窗口上
    14     
    15     CMainFrame * cmain=(CMainFrame*)AfxGetMainWnd();
    16     CClientDC dc(this);
    17     CDC cdc;
    18     cdc.CreateCompatibleDC(&dc);
    19     cdc.SelectObject(cmain->sk.top());
    20     dc.BitBlt(0,0,cmain->Screen_width,cmain->Screen_height,&cdc,0,0,SRCCOPY);
    21 
    22     
    23     
    24 
    25 }

     

        

            

  • 相关阅读:
    PHP和JS判断手机还是电脑访问
    apache 一个站点配置多个域名
    拾遗
    提高工作效率的工具
    PHP urlencode
    JS encodeURI和encodeURIComponent
    Linux实践:ELF文件格式分析
    Linux实践:文件破解
    Linux实践:模块
    Linux内核学习期末总结(网课)
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/8330404.html
Copyright © 2011-2022 走看看