• 7)创建位图知识补充


    1)只要你GetDC或者 CreateComplateDC  就得释放,否则,你的内存就会崩掉,因为,DC不释放,就会一直CreateDC

    2)CASE WM_PAINT  --->意思是窗口重绘,创建HDC和 位图加载的过程 发生在这个里面。

        就好比 你 拖拽你新创建的窗口,窗口随着你的拖拽  变大或者变小  都是  窗口重绘

    3)贴图片固定的就是那几步骤:
          所有绘图的操作都要用到HDC,这个HDC是啥:

           

     1 HDC--->环境设备句柄
     2 这个HDC就相当于  咱们的绘图板  画板上有  画笔  背景图 还有颜色等等
     3 HDC  hdc=::GetDC(hWnd);       ReleaseDC()
     4 就是取我窗口的一个设备,拿到我这个窗口的画板,获取窗口的这个DC的里面的那张图片,要是你没有贴图,这个图片就是那个背景
     5 
     6 
     7 得到已经创建好的DC
     8 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     9 CreateCompatibleDC(dc)        DeleteDC(DC);
    10  兼容性DC,
    11  创建一个新的
    12 我创建的这个是没有位图的,所以需要我选入一个位图,所以  就有了这个
    13 SelectObject(hdn_jianrong, hBitMap);
    14 
    15 ~~~~~~~~~~~~~~~~
    16 贴图片,拷贝位图
    17 ~~~~~~~~~~~~~~
    18 情况类比:加入  我们拿一张白纸去拷贝一张位图,也得两张纸,一张是带图的,一张是白纸,然后去拷贝
    19 
    20 所以  贴图片一定需要2个DC,一个叫目标,一个是源,
    21 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    22 
    23 你要往窗口上放,目标DC就是窗口
    24 HDC hdc=::GetDC(hWnd);
    25 
    26 然后你再需要一个白纸,用来装刚刚画的那个位图。
    27 HDC hdc_jianrong=::CreateCompatibleDC(hdc);
    28 
      先把我刚刚画的那个资源视图加载过来
      HBITMAP hBitMap=::LoadBitMap(hIns,hBitMap);
    29 给这张白纸贴那个图片 30 SelectObject(hdc_jianrong,hBitMap); 31 32 贴图啦 33 BitBlt(hdc,0,0,500,500,hdn_jianrong,0,0,SRCCOPY); 34 35 释放那个GetDC 36 ::DeleteDC(hdn_jianrong);//删除刚刚那个兼容性HDC 37 38 删除刚刚创建的HDC 39 ::ReleaseDC(hWnd,hdc);//释放当前的HDC

    4)改动部位和代码展示:

         

         1 #include<Windows.h> 2 #include"resource.h" 3

     4 HINSTANCE hIns;//创建一个当前应用程序的全局变量,以后就可以直接使用这个变量了
     5 //因为这个变量  我要在WndProc这个函数中使用,但是这个变量存在与WinMain函数中,所以 我定义了一个hInstance的全局变量,这样使得 我可以在WndProc中使用WinMain中的变量
     6 
     7 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
     8 {
     9     switch(uMsg)
    10     {
    11     case WM_CLOSE://点那个×,窗口关闭
    12         ::PostQuitMessage(0);//消息推出
    13         break;
    14     case WM_PAINT:
    15         HDC hdc=::GetDC(hWnd);//获得当前这个HDC的句柄
    16         HDC hdn_jianrong=::CreateCompatibleDC(hdc);//创建一个兼容性HDC
    17         HBITMAP hBitMap=::LoadBitmap(hIns,MAKEINTRESOURCE(BACKGROUND));
    18         SelectObject(hdn_jianrong, hBitMap);//把刚刚创建的那个位图hBitMap给hdc_jianrong
    19         BitBlt(hdc,0,0,500,500,hdn_jianrong,0,0,SRCCOPY);//那个位图属性设置
           ::DeleteObject(hBitMap);
    20 ::DeleteDC(hdn_jianrong);//删除刚刚那个兼容性HDC 21 ::ReleaseDC(hWnd,hdc);//释放当前的HDC 22 23 } 24 return ::DefWindowProc( hWnd, uMsg, wParam, lParam); 25 } 26 27 28 int CALLBACK WinMain(HINSTANCE hIstance, 29 HINSTANCE hPreInstance, 30 LPSTR pCmdLine, 31 int nCmdShow) 32 { 33 34 hIns=hIstance; 35 HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255)); 36 37 38 //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个) 39 WNDCLASSEX wndclass; 40 wndclass.cbClsExtra=0; 41 wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间 42 wndclass.cbSize=sizeof(WNDCLASSEX); 43 wndclass.hbrBackground=hBrush; 44 wndclass.hCursor=NULL;//光标 45 //因为上面的那个LoadCUrsor是需要字符串,但是那个IDC_CURSOR1是一个整型数字,所以 需要用那个宏给转定义一下 46 wndclass.hIcon=NULL;//窗口图标 47 wndclass.hIconSm=NULL;//窗口左上的图标 48 wndclass.hInstance=hIstance; 49 wndclass.lpfnWndProc=WndProc; 50 wndclass.lpszClassName="wangchao"; 51 wndclass.lpszMenuName=NULL; 52 wndclass.style=CS_HREDRAW|CS_VREDRAW; 53 54 //2.注册 55 if(::RegisterClassEx(&wndclass)==FALSE) 56 { 57 ::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK); 58 59 return 0; 60 } 61 //3.创建 62 63 HWND hWnd=::CreateWindow("wangchao","xiao_hua",WS_OVERLAPPEDWINDOW,100,0,500,500,NULL,NULL,hIstance,NULL); 64 65 if(hWnd==NULL) 66 { 67 ::MessageBox(NULL,"创建失败","提示",MB_OK); 68 return 0; 69 } 70 //4.显式 71 72 ::ShowWindow(hWnd,SW_SHOW); 73 74 //5.消息循环 75 76 MSG msg; 77 78 while(::GetMessage(&msg,0,0,0)) 79 { 80 //第一步先翻译 81 ::TranslateMessage(&msg); 82 //第二部分发 83 ::DispatchMessageA(&msg); 84 85 } 86 87 88 ::DeleteObject(hBrush); 89 }

      

    8)运行结果展示:


        

    9)用完还得delete:
        

        

  • 相关阅读:
    linux的msl
    kubernetes资源调度之LimitRange
    使用setfacl实现子目录继承父目录权限 转载
    k8s glusterfs,GlusterFS Volume 添加ACL支持
    windows10环境下编译python3版pjsua库
    Java单链表反转
    Linux常用命令
    slice()和splice()区别
    js文件三斜杠注释///reference path用途,js文件引用另一个js文件的写法
    【UML】如何记忆UML类图的画法
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/8304986.html
Copyright © 2020-2023  润新知