8)贴两张图,实现当前窗口的背景不变,然后仅仅文字部分

1)贴图 贴两张:

    

2)注意  每一次创建一个HBITMAP  都要删除

    代码展示:
  

 1     case WM_PAINT:
 2         HDC hdc=::GetDC(hWnd);//获得当前这个HDC的句柄
 3         HDC hdn_jianrong=::CreateCompatibleDC(hdc);//创建一个兼容性HDC
 4 
 5 
 6 
 7         HBITMAP hBitMap=::LoadBitmap(hIns,MAKEINTRESOURCE(BACKGROUND));
 8         HBITMAP hBitMap2=::LoadBitmap(hIns,MAKEINTRESOURCE(IDB_BITMAP2));
 9 
10 
11         SelectObject(hdn_jianrong, hBitMap);//把刚刚创建的那个位图hBitMap给hdc_jianrong
12         //后面的这两个 0 0 是从源图的什么位置开始拷贝 要是我是 20  20 就是从我源图的20 20开始拷贝
13         BitBlt(hdc,0,0,500,500,hdn_jianrong,0,0,SRCAND);//那个位图属性设置
14 
15         
16         SelectObject(hdn_jianrong, hBitMap2);
17         BitBlt(hdc,0,0,500,500,hdn_jianrong,0,0,SRCPAINT);//那个位图属性设置
18 
19 
20         ::DeleteObject(hBitMap2);
21         ::DeleteObject(hBitMap);
22 
23         ::DeleteDC(hdn_jianrong);//删除刚刚那个兼容性HDC
24         ::ReleaseDC(hWnd,hdc);//释放当前的HDC
25         break;

3)总的代码展示:
    

  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 
 18 
 19         HBITMAP hBitMap=::LoadBitmap(hIns,MAKEINTRESOURCE(BACKGROUND));
 20         HBITMAP hBitMap2=::LoadBitmap(hIns,MAKEINTRESOURCE(IDB_BITMAP2));
 21 
 22         SelectObject(hdn_jianrong, hBitMap);//把刚刚创建的那个位图hBitMap给hdc_jianrong
 23         //后面的这两个 0 0 是从源图的什么位置开始拷贝 要是我是 20  20 就是从我源图的20 20开始拷贝
 24         BitBlt(hdc,0,0,500,500,hdn_jianrong,0,0,SRCAND);//那个位图属性设置
 25 
 26         
 27         SelectObject(hdn_jianrong, hBitMap2);
 28         BitBlt(hdc,0,0,500,500,hdn_jianrong,0,0,SRCPAINT);//那个位图属性设置
 29 
 30         ::DeleteObject(hBitMap2);
 31         ::DeleteObject(hBitMap);
 32         ::DeleteDC(hdn_jianrong);//删除刚刚那个兼容性HDC
 33         ::ReleaseDC(hWnd,hdc);//释放当前的HDC
 34         break;
 35 
 36     }
 37     return ::DefWindowProc( hWnd, uMsg, wParam, lParam);
 38 }
 39 
 40 
 41 int CALLBACK WinMain(HINSTANCE hIstance,
 42                      HINSTANCE hPreInstance,
 43                      LPSTR pCmdLine,
 44                      int nCmdShow)
 45 {
 46             
 47     hIns=hIstance;
 48     HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255));
 49             
 50     
 51     //1.设计---->就是给WNDCLASSEX结构体初始化(结构体有12个)
 52             WNDCLASSEX wndclass;
 53             wndclass.cbClsExtra=0;
 54             wndclass.cbWndExtra=0;//这两个是确定是否要分配额外的空间
 55             wndclass.cbSize=sizeof(WNDCLASSEX);
 56             wndclass.hbrBackground=hBrush;
 57             wndclass.hCursor=NULL;//光标
 58             //因为上面的那个LoadCUrsor是需要字符串,但是那个IDC_CURSOR1是一个整型数字,所以  需要用那个宏给转定义一下
 59             wndclass.hIcon=NULL;//窗口图标
 60             wndclass.hIconSm=NULL;//窗口左上的图标
 61             wndclass.hInstance=hIstance;
 62             wndclass.lpfnWndProc=WndProc;
 63             wndclass.lpszClassName="wangchao";
 64             wndclass.lpszMenuName=NULL;
 65             wndclass.style=CS_HREDRAW|CS_VREDRAW;
 66 
 67     //2.注册
 68             if(::RegisterClassEx(&wndclass)==FALSE)
 69             {
 70                 ::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK);
 71                 
 72                 return 0;
 73             }
 74     //3.创建
 75                     
 76             HWND hWnd=::CreateWindow("wangchao","xiao_hua",WS_OVERLAPPEDWINDOW,100,0,500,500,NULL,NULL,hIstance,NULL);
 77             
 78         if(hWnd==NULL)
 79         {
 80             ::MessageBox(NULL,"创建失败","提示",MB_OK);
 81             return 0;
 82         }
 83     //4.显式
 84             
 85         ::ShowWindow(hWnd,SW_SHOW);
 86         
 87     //5.消息循环
 88         
 89             MSG msg;
 90             
 91             while(::GetMessage(&msg,0,0,0))
 92         {
 93             //第一步先翻译
 94             ::TranslateMessage(&msg);
 95             //第二部分发
 96             ::DispatchMessageA(&msg);
 97 
 98         }
 99 
100 
101     ::DeleteObject(hBrush);
102 }

4)文档目录展示:


          

5)结果展示:
    

      

原文地址:https://www.cnblogs.com/xiaoyoucai/p/8305071.html