使用C++绘制GDI位图的基本编写实例

使用C++绘制GDI位图的基本编写实例,第1张

概述1、加载位图2、建立兼容DC3、选择之前的位图对象4、用贴图函数BitBlt()HBITMAPbitmap=(HBITMAP)LoadImage(NULL,L\"Name.bmp\",IMAGE_BITMAP,high,length,LR_LOADFROMFILE);

1、加载位图

2、建立兼容DC

3、选择之前的位图对象

4、用贴图函数BitBlt()

@H_404_9@HBITMAP bitmap=(HBITMAP)LoadImage(NulL,L"name.bmp",IMAGE_BITMAP,high,length,LR_LOADFROMfile); HWND tmp=CreateCompatiable(g_hdc); SelectObject(tmp,bitmap); BitBlt(g_hdc,tmp,SRCcopY);


Demo完整代码:

@H_404_9@#include <windows.h> #include <time.h> const int TAR_HIGH=800; const int TAR_WEIGHT=600; const wchar_t TAR_Title[]=L"致我们不磨灭的青春和理想-建大英雄传"; HDC g_hdc=NulL; HDC g_mdc=NulL; HBITMAP g_hbitmap=NulL; voID Game_Paint(HWND hwnd) { SelectObject(g_mdc,g_hbitmap); BitBlt(g_hdc,TAR_HIGH,TAR_WEIGHT,g_mdc,SRCcopY); } bool Game_Init(HWND hwnd) { g_hdc=GetDC(hwnd); //在这里做初始化工作 g_hbitmap=(HBITMAP)LoadImage(NulL,L"content.bmp",LR_LOADFROMfile); //建立DC g_mdc=CreateCompatibleDC(g_hdc); Game_Paint(hwnd); ReleaseDC(hwnd,g_hdc); return 1; } bool Game_Clear(HWND hwnd) { DeleteObject(g_hbitmap); DeleteDC(g_mdc); return 1; } LRESulT CALLBACK SdjzuProc(HWND hwnd,UINT message,WParaM wParam,LParaM lParam) { switch(message) { PAINTSTRUCT paintstruct; case WM_PAINT: //新增设备环境句柄调用 g_hdc=BeginPaint(hwnd,&paintstruct); Game_Init(hwnd); EndPaint(hwnd,&paintstruct); ValIDateRect(hwnd,NulL); break; case WM_KEYDOWN: if(wParam=VK_ESCAPE) DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; } int WINAPI WinMain( __in HINSTANCE hInstance,__in_opt HINSTANCE hPrevInstance,__in LPSTR lpCmdline,__in int nShowCmd ) { WNDCLASSEX wndclass={0}; wndclass.cbSize=sizeof(WNDCLASSEX); wndclass.style=CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc=SdjzuProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=(HICON)::LoadImage(NulL,L"tarico.ico",IMAGE_ICON,LR_DEFAulTSIZE|LR_LOADFROMfile); wndclass.hCursor=LoadCursor(NulL,IDC_ARROW); wndclass.hbrBackground=(HBrush)GetStockObject(WHITE_Brush); wndclass.lpszMenuname=NulL; wndclass.lpszClassname=L"sdjzuhero"; //注册窗口 if(!RegisterClassEx(&wndclass)) return -1; HWND hwnd=CreateWindow(L"sdjzuhero",TAR_Title,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBox,CW_USEDEFAulT,NulL,hInstance,NulL);//第三个参数控制了窗口的样式,合集为WS_OVERLAPPEDWINDOW MoveWindow(hwnd,250,80,true); ShowWindow(hwnd,nShowCmd); UpdateWindow(hwnd); //载入报错模块 MSG msg={0}; while(msg.message!=WM_QUIT) { if(PeekMessage(&msg,PM_REMOVE)) { TranslateMessage(&msg); dispatchMessage(&msg); } } UnregisterClass(L"sdjzuhero",wndclass.hInstance); return 0; }

刚开始试了几次没有成功,发现是在WndProc里对函数的调用出错了,没有执行init部分,改成init之后问题解决。看来与ACM一样,不能唯别人的模板是从,还是应该理解后加以修改,以更好的利用。

总结

以上是内存溢出为你收集整理的使用C++绘制GDI位图的基本编写实例全部内容,希望文章能够帮你解决使用C++绘制GDI位图的基本编写实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1249946.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存