前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows 下窗口画图---十天教会你俄罗斯方块

Windows 下窗口画图---十天教会你俄罗斯方块

作者头像
用户2965768
发布2018-08-30 16:25:02
5760
发布2018-08-30 16:25:02
举报
文章被收录于专栏:wymwym

接上篇:https://blog.csdn.net/qq_41603898/article/details/80968333

1、WM_PAINT

2、Rectangle

3、兼容性DC

一.在回调函数中

补上一种case

case WM_PAINT://窗口变化时重绘

hDC = BeginPaint(hWnd,&ps);

       OnPaint(hDC);//自定义函数,包括Rectangle

  EndPaint(hWnd,&ps);

        break;

二.Rectangle 顾名思义矩形,画矩形

BOOL Rectangle(HDC hdc, // handle to DC

int nLeftRect, // x-coord of upper-left corner of rectangle

int nTopRect, // y-coord of upper-left corner of rectangle

int nRightRect, // x-coord of lower-right corner of rectangle

int nBottomRect // y-coord of lower-right corner of rectangle);//通过给左上角和右下角一个点对角线画矩形

将画矩形函数装在OnPaint函数中,为后面兼容DC准备

void OnPaint(HDC hDC){//画矩形框Rectangle(hDC,RECT_UPPER_X,RECT_UPPER_Y,RECT_LOWER_X,RECT_LOWER_Y);}

#define WND_HEIGHT 640//比RECT_LOWER_Y大

#define RECT_UPPER_X 0

#define RECT_UPPER_Y 0

#define RECT_LOWER_X 300

#define RECT_LOWER_Y 600//也就是两个点坐标,规范正式而已

写在后面记得声明

三.兼容性DC(详情

根据设备DC创建兼容性DC,并在兼容性DC上把绘图操作全部绘制完,

然后再一次性拷贝到源设备DC上,避免屏幕刷新闪烁

1.创建兼容性DC

2.创建兼容性位图

3.将位图与DC绑定在一起

4.释放位图

5.释放DC

将内存DC传递到窗口DC

BOOL BitBlt( HDC hdcDest, int nXDest, int nYDest, nt nWidth, int nHeight,HDC hdcSrc, nt nXSrc, int nYSrc, DWORD dwRop );

返回值:失败返回0, 成功返回非零

参数1: 目标DC,窗口DC

参数2,3: 目标的起始位置,注意是基于我们的窗口

参数4,5: 区域的大小

参数6: 源DC,也就是我们的内存DC

参数7,8: 内存图片的起始位置

参数9: 传递的方式

最后的OnPaint()

void OnPaint(HDC hDC) { HDC mDC = CreateCompatibleDC(hDC); HBITMAP hBitmap = CreateCompatibleBitmap(hDC, 300, 600); SelectObject(mDC, hBitmap); Rectangle(hDC, 0, 0, 300, 600); BitBlt(hDC, 0, 0, 300, 600, mDC, 0, 0, SRCCOPY); DeleteObject(hBitmap); DeleteDC(mDC); }

结合上一篇文章更新的代码:

#include <windows.h> #include "Resource.h" #include "stdafx.h" #define WND_POS_X 100 #define WND_POS_Y 100 #define WND_WIDTH 500 #define WND_HEIGHT 660 #define IDR_MENU1                       130 #define IDR_MENU3                       133 #define IDI_ICON2                       134 //声明 LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnPaint(HDC hDC); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd;//窗口句柄 MSG mSg; HMENU hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU3)); //创建窗口结构体 WNDCLASSEX wc; wc.cbClsExtra = 0;//暂时不用 wc.cbSize = sizeof(wc);//结构体大小 wc.cbWndExtra = 0;//暂时不用 wc.hbrBackground = (HBRUSH)COLOR_WINDOW;//背景颜色 wc.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(IDI_HAND));//光标 wc.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON2));//窗口左上角的图标 wc.hIconSm = NULL;//状态栏中的图标,默认与左上角图标一致 wc.hInstance = hInstance;//实例句柄 wc.lpfnWndProc = WndProc;//回调函数 wc.lpszClassName = "nanhang";//结构体名字 wc.lpszMenuName = ("MEAN");//菜单栏名字 wc.style = CS_HREDRAW | CS_VREDRAW;//窗口水平变化或是垂直变化时重绘窗口   //注册窗口结构体 if (0 == RegisterClassEx(&wc)) { int eNum = GetLastError();//注册失败的错误代码 return 0;//注册失败 } //创建窗口 hWnd = CreateWindowEx(WS_EX_WINDOWEDGE, "nanhang", "俄罗斯方块", WS_OVERLAPPEDWINDOW, WND_POS_X, WND_POS_Y, WND_WIDTH, WND_HEIGHT, NULL, hMenu, hInstance, NULL); if (NULL == hWnd) { return 0;//创建失败 } //显示窗口 ShowWindow(hWnd, nCmdShow); //消息循环 while (GetMessage(&mSg, NULL, 0, 0)) { //翻译消息 TranslateMessage(&mSg); //分发消息 DispatchMessage(&mSg); } return 0; } //回调函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT uID, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hDC; switch (uID) {case WM_PAINT: hDC = BeginPaint(hWnd, &ps); OnPaint(hDC); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0);//点击叉后,关闭窗口同时退出程序 break; } return DefWindowProc(hWnd, uID, wParam, lParam);//让系统自动处理一些默认消息 } void OnPaint(HDC hDC) { HDC mDC = CreateCompatibleDC(hDC); HBITMAP hBitmap = CreateCompatibleBitmap(hDC, 300, 600); SelectObject(mDC, hBitmap); Rectangle(hDC, 0, 0, 300, 600); BitBlt(hDC, 0, 0, 300, 600, mDC, 0, 0, SRCCOPY); DeleteObject(hBitmap); DeleteDC(mDC); }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档