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)结果展示: