WINdows编程大作业2~

前言:在大作业1的基础上给程序添加了新的功能。

主题:设计程序在窗口中使用定时器,每隔1秒交替地用红、绿、蓝色画刷来填充整个窗口客户区。

代码干货如下:

#include "windows.h"
#include "string.h" //加载相应的头文件
#include "stdlib.h"
#include "stdio.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
    
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="窗口"; //窗口类名
char lpszTitle[]="定时刷新窗口"; //窗口标题

wndclass.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; //窗口类型
wndclass.lpfnWndProc=WndProc; //窗口处理函数为WndProc
wndclass.cbClsExtra=0; //窗口类无扩展
wndclass.cbWndExtra=0; //窗口实例无扩展
wndclass.hInstance=hInstance; //当前实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口最小化图标为默认图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景为白色


wndclass.lpszMenuName=NULL; //窗口中无菜单
wndclass.lpszClassName=lpszClassName; //窗口类名


if(!RegisterClass(&wndclass)) //如果窗口注册失败发出警告声音
{
MessageBeep(0);
return FALSE;
}


hwnd=CreateWindow(
lpszClassName, //窗口类名
lpszTitle, //窗口实例句柄的标题名
WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, //窗口风格
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角坐标为默认值
CW_USEDEFAULT, //窗口的高和宽为默认值
NULL, //此窗口无父窗口
NULL, //此窗口无主菜单
hInstance, //创建此窗口的应用程序当前句柄
NULL //不使用该值
);


ShowWindow(hwnd,nCmdShow); //显示窗口
UpdateWindow(hwnd); //绘制用户区
while(GetMessage(&Msg,NULL,0,0)) //消息循环
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam; //程序终止时将信息返回系统
}



//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc; //定义指向设备上下文的句柄
HBRUSH hB1,hB2,hB3; //定义指定的画刷
PAINTSTRUCT ps; //定义指向绘图信息的结构体变量
switch(message) //处理消息
{
case WM_PAINT: //处理绘图消息
hdc=BeginPaint(hwnd,&ps); //取得环境设备句柄
SetMapMode(hdc,MM_TEXT); //设置映射模式
hB1=CreateSolidBrush(RGB(255,0,0)); //创建红色画刷
hB2=CreateSolidBrush(RGB(0,255,0)); //创建绿色画刷
hB3=CreateSolidBrush(RGB(0,0,255)); //创建蓝色画刷
SelectObject(hdc,hB1); //选择红色画刷
Rectangle(hdc,0,0,800,800); //填充整个用户区
Sleep(1000); //设置定时器,间隔1秒
SelectObject(hdc,hB2); //选择绿色画刷
Rectangle(hdc,0,0,800,800); //填充整个用户区
Sleep(1000); //设置定时器,间隔1秒
SelectObject(hdc,hB3); //选择蓝色画刷
  Rectangle(hdc,0,0,800,800); //填充整个用户区
InvalidateRect(hwnd,NULL,1); //刷新窗口,重新绘图
EndPaint(hwnd,&ps); //释放设备环境句柄
DeleteObject(hB1);
DeleteObject(hB2); //删除画刷句柄
DeleteObject(hB3);
break;
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return(0);
}
 
实验总结:

1.Windows应用程序包括入口函数WinMain和窗口函数WndProc。

2.绘图工具使用的一般步骤: 1.获取Win系统库存画笔/刷或创建画笔/刷;2.将画笔/刷选入设备环境,使用函数:SelectObject(hdc,hP/hBr);3.删除画笔/刷,使用函数:DeleteObject(hP/hBr)。

3.Windows应用程序变化万千,但消息机制和窗口过程却是Windows应用程序的基石和骨架,贯穿于所有Windows应用程序之中。

课程学习及大作业完成心得:首先是关于大作业的,本人的大作业是参考某一百度文档关于框架窗口程序和GDI图形程序设计,并且自己实际代码编写和运行之后,写作的实验报告,虽然不能算是严格意义上的原创,但是也是自己付出过心血的0.0 

其次就是感谢金星老师这几个月的悉心教导,的确让自己对于WINDOWS编程有了一个较为深层次的认识,而且养成了对于新知识就想要亮闪闪,考考你,帮帮我的习惯。相信培育了一种新的习惯对于编程学习者来说是意义重大的,再次感谢老师!


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值