6)創建位圖
阿新 • • 發佈:2018-01-17
message bitmap bitblt obj lpar make get jad copy
1)創建位圖步驟,首先 我們需要創建窗口的基本代碼,代碼展示:
1 #include<Windows.h> 2 #include"resource.h" 3 4 5 //這個叫 窗口消息處理函數 6 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 7 { 8 switch(uMsg) 9 { 10 case WM_CLOSE://點那個×,窗口關閉 11 ::PostQuitMessage(0);//消息推出 12 break; 13 14 15 } 16 return ::DefWindowProc( hWnd, uMsg, wParam, lParam); 17 } 18 19 20 int CALLBACK WinMain(HINSTANCE hIstance, 21 HINSTANCE hPreInstance, 22 LPSTR pCmdLine, 23 int nCmdShow) 24 { 25 26 HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255)); 27 28 29 //1.設計---->就是給WNDCLASSEX結構體初始化(結構體有12個) 30 WNDCLASSEX wndclass; 31 wndclass.cbClsExtra=0; 32 wndclass.cbWndExtra=0;//這兩個是確定是否要分配額外的空間 33 wndclass.cbSize=sizeof(WNDCLASSEX); 34 wndclass.hbrBackground=hBrush;35 wndclass.hCursor=NULL;//光標 36 //因為上面的那個LoadCUrsor是需要字符串,但是那個IDC_CURSOR1是一個整型數字,所以 需要用那個宏給轉定義一下 37 wndclass.hIcon=NULL;//窗口圖標 38 wndclass.hIconSm=NULL;//窗口左上的圖標 39 wndclass.hInstance=hIstance; 40 wndclass.lpfnWndProc=WndProc; 41 wndclass.lpszClassName="wangchao"; 42 wndclass.lpszMenuName=NULL; 43 wndclass.style=CS_HREDRAW|CS_VREDRAW; 44 45 //2.註冊 46 if(::RegisterClassEx(&wndclass)==FALSE) 47 { 48 ::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK); 49 50 return 0; 51 } 52 //3.創建 53 54 HWND hWnd=::CreateWindow("wangchao","xiao_hua",WS_OVERLAPPEDWINDOW,100,0,500,500,NULL,NULL,hIstance,NULL); 55 56 if(hWnd==NULL) 57 { 58 ::MessageBox(NULL,"創建失敗","提示",MB_OK); 59 return 0; 60 } 61 //4.顯式 62 63 ::ShowWindow(hWnd,SW_SHOW); 64 65 //5.消息循環 66 67 MSG msg; 68 69 while(::GetMessage(&msg,0,0,0)) 70 { 71 //第一步先翻譯 72 ::TranslateMessage(&msg); 73 //第二部分發 74 ::DispatchMessageA(&msg); 75 76 } 77 78 79 ::DeleteObject(hBrush); 80 }
2)然後 創建位圖 步驟:
1)首先是 視圖--->資源試圖--->Bitmap--->新建
2)然後 新建:
3)可以直接修改位圖的大小
4)看我們的那個resource.h中的代碼
4)真正的修改部分
5)代碼展示:
1 #include<Windows.h> 2 #include"resource.h" 3 4 HBITMAP hBitMap; 5 //這個叫 窗口消息處理函數 6 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 7 { 8 switch(uMsg) 9 { 10 case WM_CLOSE://點那個×,窗口關閉 11 ::PostQuitMessage(0);//消息推出 12 break; 13 case WM_PAINT: 14 HDC hdc=::GetDC(hWnd);//獲得當前這個HDC的句柄 15 HDC hdn_jianrong=::CreateCompatibleDC(hdc);//創建一個兼容性HDC 16 SelectObject(hdn_jianrong, hBitMap);//把剛剛創建的那個位圖hBitMap給hdc_jianrong 17 BitBlt(hdc,0,0,500,500,hdn_jianrong,0,0,SRCCOPY);//那個位圖屬性設置 18 ::DeleteDC(hdn_jianrong);//刪除剛剛那個兼容性HDC 19 ::ReleaseDC(hWnd,hdc);//釋放當前的HDC 20 21 } 22 return ::DefWindowProc( hWnd, uMsg, wParam, lParam); 23 } 24 25 26 int CALLBACK WinMain(HINSTANCE hIstance, 27 HINSTANCE hPreInstance, 28 LPSTR pCmdLine, 29 int nCmdShow) 30 { 31 32 HBRUSH hBrush=::CreateSolidBrush(RGB(0,0,255)); 33 34 35 //1.設計---->就是給WNDCLASSEX結構體初始化(結構體有12個) 36 WNDCLASSEX wndclass; 37 wndclass.cbClsExtra=0; 38 wndclass.cbWndExtra=0;//這兩個是確定是否要分配額外的空間 39 wndclass.cbSize=sizeof(WNDCLASSEX); 40 wndclass.hbrBackground=hBrush; 41 wndclass.hCursor=NULL;//光標 42 //因為上面的那個LoadCUrsor是需要字符串,但是那個IDC_CURSOR1是一個整型數字,所以 需要用那個宏給轉定義一下 43 wndclass.hIcon=NULL;//窗口圖標 44 wndclass.hIconSm=NULL;//窗口左上的圖標 45 wndclass.hInstance=hIstance; 46 wndclass.lpfnWndProc=WndProc; 47 wndclass.lpszClassName="wangchao"; 48 wndclass.lpszMenuName=NULL; 49 wndclass.style=CS_HREDRAW|CS_VREDRAW; 50 51 //2.註冊 52 if(::RegisterClassEx(&wndclass)==FALSE) 53 { 54 ::MessageBox(NULL,"dhsakfljadsf","提示",MB_OK); 55 56 return 0; 57 } 58 //3.創建 59 60 HWND hWnd=::CreateWindow("wangchao","xiao_hua",WS_OVERLAPPEDWINDOW,100,0,500,500,NULL,NULL,hIstance,NULL); 61 62 if(hWnd==NULL) 63 { 64 ::MessageBox(NULL,"創建失敗","提示",MB_OK); 65 return 0; 66 } 67 //4.顯式 68 69 ::ShowWindow(hWnd,SW_SHOW); 70 hBitMap=::LoadBitmap(hIstance,MAKEINTRESOURCE(BACKGROUND)); 71 //5.消息循環 72 73 MSG msg; 74 75 while(::GetMessage(&msg,0,0,0)) 76 { 77 //第一步先翻譯 78 ::TranslateMessage(&msg); 79 //第二部分發 80 ::DispatchMessageA(&msg); 81 82 } 83 84 85 ::DeleteObject(hBrush); 86 }
目錄關系:
6)創建位圖