//int y;相对于桌面 坐标 是像素 上,
//宽度,
//高度,
//子句柄 子窗口,
//菜单的句柄 没有菜单NULL,
//当前实例句柄,
//(win下lp是指针类型)指向一个值得指针,多文档 多个编辑框);
if (NULL == hWnd) //窗口句柄 窗口的唯一标识
{
return 0;
}
//5.显示窗口
ShowWindow(hWnd, SW_SHOWNORMAL);//句柄,显示风格(最大化 最小化 默认nCmdShow等)
//隐藏显示返回0 正常显示返回非0
//6.消息循环
while (GetMessage(&mSg, NULL, 0, 0))//(指向MSG消息结构体的指针,窗口句柄(NULL与非NULL的区别NULL接收所以窗口消息非NULL接所填句柄的消息,3 4参数处理消息范围(0, 0是取所以范围))
//GetMessage取到消息返回非零值
{
//消息翻译 将输入设备的电信号转换成字符消息
TranslateMessage(&mSg);//参是一个指针指向结构体
//分发消息 分类 :标准消息 命令消息 通知消息 自定义消息
DispatchMessage(&mSg);//参是一个指针指向结构体
}
return 0;
}
/*
兼容性DC(就是在后台画好当前页面再给当前)
创建兼容性DC
HDC CreateCompatibleDC(HDC hdc);
创建兼容性位图
HBITMAP CreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight);
将DC与位图绑定在一起
HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
释放DC
BOOL DeleteDC(HDC hdc);
将内存DC传递到窗口DC
BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, nt nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);
(目标DC 窗口DC, 2 3参数 目标的起始位置 注意是基于我们的窗口, 4 5区域的大小, 源DC 也是我们的内存DC, 7 8内存图片的起始位置, 传递的方式)
返回值:失败返回0,成功返回非0
*/
/*
定时器:
启动定时器
UINT_PTR SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);
(窗口句柄hWnd NULL, 定时器ID 不理会, 间隔时间 毫秒 1000ms = 1s, 设置为NULL 处理函数的地址);
返回值:成功返回非零
关闭定时器
BOOL KillTimer(HWND hWnd, UINT_PTR uIDEvent);
*/
/*
给方块图色
HBRUSH oldBrush;
创建一个颜色的画刷
HBRUSH newBrush = CreateSolidBrush(RGB(67, 132, 19));
绑定当前DC与画刷,返回系统默认画刷
oldBrush = SelectObject(hdc, newBrush);
使用完新画刷,把系统默认画刷选回来,返回创建的画刷
newBrush = SelectObject(hdc,oldBrush);
释放画刷句柄
DeleteObject(newBrush);
*/
//背景数组(二维数组)
char g_arrBackGroud[20][10] = { 0 };
//小方块数组
char g_arrSqare[2][4] = { 0 };
//标记小方块的形状
int g_nSqareID = -1;
// 记录位置
int g_nLine = -1;//行
int g_nList = -1;//列
//记分
int g_nScore = 0;
//函数实现
void OnPaint(HDC hDc)
{
//创建兼容性DC(dc编号)可以创建多个
HDC hMemDC = CreateCompatibleDC(hDc);
//位图(创建一张纸)
HBITMAP hBitmapBack = CreateCompatibleBitmap(hDc, 500, 646);//(,纸的大小)
//关联起来
SelectObject(hMemDC, hBitmapBack);
//显示方块
PaintSpare(hMemDC);
ShowSqare2(hMemDC);
//显示右面 显示分数
ShowScore(hMemDC);
//传递//源
BitBlt(hDc, 0, 0, 500, 600, hMemDC, 0, 0, SRCCOPY);
//释放DC
DeleteObject(hBitmapBack);//位图
DeleteDC(hMemDC);//编号
}
//显示分数
void ShowScore(HDC hMemDC)
{
char strScore[10] = { 0 };
Rectangle(hMemDC, 300, 0, 500, 646);//右边显示
itoa(g_nScore, strScore, 10);//转换成字符串
TextOut(hMemDC, 340, 100, "得分:", strlen("得分:"));
TextOut(hMemDC, 400, 100, strScore, strlen(strScore));//(句柄,x,y,一个字符串,字节数 有效的)
TextOut(hMemDC, 340, 180, "回车开始", strlen("回车开始"));
TextOut(hMemDC, 340, 210, "上键变形", strlen("上键变形"));
TextOut(hMemDC, 340, 240, "下键加速", strlen("下键加速"));
TextOut(hMemDC, 340, 270, "左键左移", strlen("左键左移"));
TextOut(hMemDC, 340, 300, "右键右移", strlen("右键右移"));
TextOut(hMemDC, 350, 150, "按键:", strlen("按键:"));
}
//初始化
void OnCreate()
{
srand((unsigned)time(NULL));
CreateRandmSqare();
CopySqareToBack();
}
//显示方块
void PaintSpare(HDC hMemDC)
{
int i = 0;
int j = 0;//i j 循环遍历用
//旧的画刷
HBRUSH hOldBrush;
//画刷 涂颜色
HBRUSH hNewBrush;
//画刷 涂颜色背景
hNewBrush = CreateSolidBrush(RGB(255, 255, 128));
//选入当前DC
hOldBrush = (HBRUSH)SelectObject(hMemDC, hNewBrush);
//画大方块
Rectangle(hMemDC, 0, 0, 300, 600);//(画板, 画窗口起始位置, 画结束位置 先横向 后竖向)
hNewBrush = (HBRUSH)SelectObject(hMemDC, hOldBrush);
DeleteObject(hNewBrush);
////指定一个方块
//g_arrBackGroud[2][4] = 1;
//g_arrBackGroud[3][3] = 1;
//g_arrBackGroud[3][4] = 1;
//g_arrBackGroud[3][5] = 1;
//画刷 涂颜色小方块
hNewBrush = CreateSolidBrush(RGB(0, 255, 0));
//选入当前DC
hOldBrush = (HBRUSH)SelectObject(hMemDC, hNewBrush);
//遍历
for (i = 0; i < 20; i++)//行
{
for (j = 0; j < 10; j++)//列
{
if (1 == g_arrBackGroud[i][j])
{
//画方块
Rectangle(hMemDC, j * 30, i * 30, j * 30 + 30, i * 30 + 30);
}
}
}
hNewBrush = (HBRUSH)SelectObject(hMemDC, hOldBrush);
DeleteObject(hNewBrush);
}
//随机小方块
int CreateRandmSqare()
{
int n = rand() % 7;
switch (n)//n
{
case 1:
g_arrSqare[0][0] = 1,g_arrSqare[0][1] = 1, g_arrSqare[0][2] = 0, g_arrSqare[0][3] = 0;
g_arrSqare[1][0] = 0, g_arrSqare[1][1] = 1, g_arrSqare[1][2] = 1, g_arrSqare[1][3] = 0;
g_nLine = 0;
g_nList = 3;
break;
case 2:
------------华丽的分割线--------------
最近两天,我没有坚持发文章,我想要不断给大家更新内容,可是我真的不知道要发什么内容。每次发源码的时候很多人都会因为编译器的原因运行不出来,这个也不排除,因为每个人使用的编译器都不一样。
我发现很多人都会问这几个问题
1、什么是编程?
答:编程=语言+平台
2、新手应该学什么语言?
答:新手建议先从C语言开始学,因为C语言是计算机入门语言,c++ 、Java、c#等都是借鉴了C语言的语法。
3、我到底该学什么语言?
答:----别问,学就对了;任何语言都是从基础开始学习!
经过长时间精心备课,杨老师的C语言系统已经上线,本期共包含22节课,课程为标准C语言课程,课程内容见下图,希望大家能把握好这期课,达到完美的学习效果。
课程包含内容:
数据类型、进制转换、运算符、循环语句、开关分支语句、函数、数组、字符串、指针、结构体、内存管理、文件操作函数指针、指针函数、多维数组、高级指针、
这期课程上课时间是:
每天晚上一节课
每节课是一个小时共:22节课
前20名支付是20元,优惠名额过了后面报名的学员是50元。
满30人开班,早点报名早点学习!
已付款的同学提供转账截图并微信联系我。最后希望大家都能学到更多的技术和知识。本期课会重新建微信课堂群,以便共享学习资料和杨老师与大家的提问和互动。
小编的微信号:ma146009
零基础入门点击原文阅读
我来说两句排行榜